diff --git a/.gitignore b/.gitignore index cef8df4b..f1c40e97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ _site *.log +*.swp .sass-cache diff --git a/CNAME b/CNAME deleted file mode 100644 index df53adaa..00000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -softdes.olin.build \ No newline at end of file diff --git a/Gemfile b/Gemfile index 9b497089..bf3b967b 100644 --- a/Gemfile +++ b/Gemfile @@ -6,3 +6,4 @@ group :jekyll_plugins do end gem 'html-proofer' +gem 'therubyracer' diff --git a/Gemfile.lock b/Gemfile.lock index f271785f..c7c92116 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,72 +1,77 @@ GEM remote: https://rubygems.org/ specs: - activesupport (4.2.8) + activesupport (4.2.9) i18n (~> 0.7) minitest (~> 5.1) thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) - addressable (2.5.1) - public_suffix (~> 2.0, >= 2.0.2) + addressable (2.5.2) + public_suffix (>= 2.0.2, < 4.0) coffee-script (2.4.1) coffee-script-source execjs - coffee-script-source (1.12.2) + coffee-script-source (1.11.1) colorator (1.1.0) - colored (1.2) + colorize (0.8.1) + commonmarker (0.17.7.1) + ruby-enum (~> 0.5) + concurrent-ruby (1.0.5) em-websocket (0.5.1) eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) - ethon (0.10.1) + ethon (0.11.0) ffi (>= 1.3.0) eventmachine (1.2.5) execjs (2.7.0) - faraday (0.13.1) + faraday (0.14.0) multipart-post (>= 1.2, < 3) ffi (1.9.18) forwardable-extended (2.6.0) gemoji (3.0.0) - github-pages (148) - activesupport (= 4.2.8) + github-pages (175) + activesupport (= 4.2.9) github-pages-health-check (= 1.3.5) - jekyll (= 3.5.1) - jekyll-avatar (= 0.4.2) - jekyll-coffeescript (= 1.0.1) + jekyll (= 3.6.2) + jekyll-avatar (= 0.5.0) + jekyll-coffeescript (= 1.0.2) + jekyll-commonmark-ghpages (= 0.1.3) jekyll-default-layout (= 0.1.4) jekyll-feed (= 0.9.2) jekyll-gist (= 1.4.1) - jekyll-github-metadata (= 2.6.0) + jekyll-github-metadata (= 2.9.3) jekyll-mentions (= 1.2.0) - jekyll-optional-front-matter (= 0.2.0) + jekyll-optional-front-matter (= 0.3.0) jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.1.0) + jekyll-readme-index (= 0.2.0) jekyll-redirect-from (= 0.12.1) - jekyll-relative-links (= 0.4.1) + jekyll-relative-links (= 0.5.2) + jekyll-remote-theme (= 0.2.3) jekyll-sass-converter (= 1.5.0) - jekyll-seo-tag (= 2.2.3) - jekyll-sitemap (= 1.0.0) + jekyll-seo-tag (= 2.3.0) + jekyll-sitemap (= 1.1.1) jekyll-swiss (= 0.4.0) - jekyll-theme-architect (= 0.0.4) - jekyll-theme-cayman (= 0.0.4) - jekyll-theme-dinky (= 0.0.4) - jekyll-theme-hacker (= 0.0.4) - jekyll-theme-leap-day (= 0.0.4) - jekyll-theme-merlot (= 0.0.4) - jekyll-theme-midnight (= 0.0.4) - jekyll-theme-minimal (= 0.0.4) - jekyll-theme-modernist (= 0.0.4) - jekyll-theme-primer (= 0.3.1) - jekyll-theme-slate (= 0.0.4) - jekyll-theme-tactile (= 0.0.4) - jekyll-theme-time-machine (= 0.0.4) - jekyll-titles-from-headings (= 0.3.0) - jemoji (= 0.8.0) - kramdown (= 1.13.2) + jekyll-theme-architect (= 0.1.0) + jekyll-theme-cayman (= 0.1.0) + jekyll-theme-dinky (= 0.1.0) + jekyll-theme-hacker (= 0.1.0) + jekyll-theme-leap-day (= 0.1.0) + jekyll-theme-merlot (= 0.1.0) + jekyll-theme-midnight (= 0.1.0) + jekyll-theme-minimal (= 0.1.0) + jekyll-theme-modernist (= 0.1.0) + jekyll-theme-primer (= 0.5.2) + jekyll-theme-slate (= 0.1.0) + jekyll-theme-tactile (= 0.1.0) + jekyll-theme-time-machine (= 0.1.0) + jekyll-titles-from-headings (= 0.5.0) + jemoji (= 0.8.1) + kramdown (= 1.16.2) liquid (= 4.0.0) listen (= 3.0.6) mercenary (~> 0.3) minima (= 2.1.1) - rouge (= 1.11.1) + rouge (= 2.2.1) terminal-table (~> 1.4) github-pages-health-check (1.3.5) addressable (~> 2.3) @@ -74,42 +79,51 @@ GEM octokit (~> 4.0) public_suffix (~> 2.0) typhoeus (~> 0.7) - html-pipeline (2.7.0) + html-pipeline (2.7.1) activesupport (>= 2) nokogiri (>= 1.4) - html-proofer (3.7.2) + html-proofer (3.7.6) activesupport (>= 4.2, < 6.0) addressable (~> 2.3) - colored (~> 1.2) + colorize (~> 0.8) mercenary (~> 0.3.2) - nokogiri (~> 1.7) + nokogiri (~> 1.8.1) parallel (~> 1.3) typhoeus (~> 0.7) yell (~> 2.0) http_parser.rb (0.6.0) - i18n (0.8.6) - jekyll (3.5.1) + i18n (0.9.3) + concurrent-ruby (~> 1.0) + jekyll (3.6.2) addressable (~> 2.4) colorator (~> 1.0) jekyll-sass-converter (~> 1.0) jekyll-watch (~> 1.1) - kramdown (~> 1.3) + kramdown (~> 1.14) liquid (~> 4.0) mercenary (~> 0.3.3) pathutil (~> 0.9) - rouge (~> 1.7) + rouge (>= 1.7, < 3) safe_yaml (~> 1.0) - jekyll-avatar (0.4.2) + jekyll-avatar (0.5.0) jekyll (~> 3.0) - jekyll-coffeescript (1.0.1) + jekyll-coffeescript (1.0.2) coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.1.0) + commonmarker (~> 0.14) + jekyll (>= 3.0, < 4.0) + jekyll-commonmark-ghpages (0.1.3) + commonmarker (~> 0.17.6) + jekyll-commonmark (~> 1) + rouge (~> 2) jekyll-default-layout (0.1.4) jekyll (~> 3.0) jekyll-feed (0.9.2) jekyll (~> 3.3) jekyll-gist (1.4.1) octokit (~> 4.2) - jekyll-github-metadata (2.6.0) + jekyll-github-metadata (2.9.3) jekyll (~> 3.1) octokit (~> 4.0, != 4.4.0) jekyll-livereload (0.2.2) @@ -119,83 +133,106 @@ GEM activesupport (~> 4.0) html-pipeline (~> 2.3) jekyll (~> 3.0) - jekyll-optional-front-matter (0.2.0) + jekyll-optional-front-matter (0.3.0) jekyll (~> 3.0) jekyll-paginate (1.1.0) - jekyll-readme-index (0.1.0) + jekyll-readme-index (0.2.0) jekyll (~> 3.0) jekyll-redirect-from (0.12.1) jekyll (~> 3.3) - jekyll-relative-links (0.4.1) + jekyll-relative-links (0.5.2) jekyll (~> 3.3) + jekyll-remote-theme (0.2.3) + jekyll (~> 3.5) + rubyzip (>= 1.2.1, < 3.0) + typhoeus (>= 0.7, < 2.0) jekyll-sass-converter (1.5.0) sass (~> 3.4) - jekyll-seo-tag (2.2.3) + jekyll-seo-tag (2.3.0) jekyll (~> 3.3) - jekyll-sitemap (1.0.0) + jekyll-sitemap (1.1.1) jekyll (~> 3.3) jekyll-swiss (0.4.0) - jekyll-theme-architect (0.0.4) + jekyll-theme-architect (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.5.2) + jekyll (~> 3.5) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.2) + jekyll-theme-slate (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.1.0) + jekyll (~> 3.5) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.0) jekyll (~> 3.3) - jekyll-theme-cayman (0.0.4) - jekyll (~> 3.3) - jekyll-theme-dinky (0.0.4) - jekyll (~> 3.3) - jekyll-theme-hacker (0.0.4) - jekyll (~> 3.3) - jekyll-theme-leap-day (0.0.4) - jekyll (~> 3.3) - jekyll-theme-merlot (0.0.4) - jekyll (~> 3.3) - jekyll-theme-midnight (0.0.4) - jekyll (~> 3.3) - jekyll-theme-minimal (0.0.4) - jekyll (~> 3.3) - jekyll-theme-modernist (0.0.4) - jekyll (~> 3.3) - jekyll-theme-primer (0.3.1) - jekyll (~> 3.3) - jekyll-theme-slate (0.0.4) - jekyll (~> 3.3) - jekyll-theme-tactile (0.0.4) - jekyll (~> 3.3) - jekyll-theme-time-machine (0.0.4) - jekyll (~> 3.3) - jekyll-titles-from-headings (0.3.0) - jekyll (~> 3.3) - jekyll-watch (1.5.0) - listen (~> 3.0, < 3.1) - jemoji (0.8.0) - activesupport (~> 4.0) + jekyll-watch (1.5.1) + listen (~> 3.0) + jemoji (0.8.1) + activesupport (~> 4.0, >= 4.2.9) gemoji (~> 3.0) html-pipeline (~> 2.2) jekyll (>= 3.0) - kramdown (1.13.2) + kramdown (1.16.2) + libv8 (3.16.14.19) liquid (4.0.0) listen (3.0.6) rb-fsevent (>= 0.9.3) rb-inotify (>= 0.9.7) mercenary (0.3.6) - mini_portile2 (2.2.0) + mini_portile2 (2.3.0) minima (2.1.1) jekyll (~> 3.3) - minitest (5.10.3) + minitest (5.11.3) multipart-post (2.0.0) net-dns (0.8.0) - nokogiri (1.8.0) - mini_portile2 (~> 2.2.0) - octokit (4.7.0) + nokogiri (1.8.2) + mini_portile2 (~> 2.3.0) + octokit (4.8.0) sawyer (~> 0.8.0, >= 0.5.3) - parallel (1.12.0) - pathutil (0.14.0) + parallel (1.12.1) + pathutil (0.16.1) forwardable-extended (~> 2.6) public_suffix (2.0.5) rb-fsevent (0.10.2) rb-inotify (0.9.10) ffi (>= 0.5.0, < 2) - rouge (1.11.1) + ref (2.0.0) + rouge (2.2.1) + ruby-enum (0.7.1) + i18n + rubyzip (1.2.1) safe_yaml (1.0.4) - sass (3.5.1) + sass (3.5.5) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) @@ -205,10 +242,13 @@ GEM faraday (~> 0.8, < 1.0) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) + therubyracer (0.12.3) + libv8 (~> 3.16.14.15) + ref thread_safe (0.3.6) typhoeus (0.8.0) ethon (>= 0.8.0) - tzinfo (1.2.3) + tzinfo (1.2.4) thread_safe (~> 0.1) unicode-display_width (1.3.0) yell (2.0.7) @@ -220,6 +260,7 @@ DEPENDENCIES github-pages html-proofer jekyll-livereload + therubyracer BUNDLED WITH - 1.14.6 + 1.16.1 diff --git a/README.md b/README.md index 2d2b24df..102508d3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ -# Fall 2017 SoftDes Web Site -[![Build Status](https://travis-ci.org/sd17fall/softdes.web.svg?branch=master)](https://travis-ci.org/sd17fall/softdes.web) +# Spring 2018 SoftDes Web Site +[![Build Status](https://travis-ci.org/sd1spring/softdes.web.svg?branch=master)](https://travis-ci.org/sd18spring/softdes.web) -Couse site for Fall 2017 Software Design @ Olin College. +Course site for Fall 2018 Software Design @ Olin College. + +To build and deploy locally +``` +bundle exec jekyll serve +``` + +To access the server, go to [http://127.0.0.1:4000](http://127.0.0.1:4000) diff --git a/_activities/course-evaluation.md b/_activities/course-evaluation.md deleted file mode 100644 index 2da3cc9d..00000000 --- a/_activities/course-evaluation.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Course Evaluation -date: 2017-11-27 09:00:00 -05:00 -end_date: 2018-01-03 23:59:59 -05:00 -inline: true ---- - -## Olin Students / Cross-Registered Students with Olin logins - -1. Sign into . -2. Click on the ["Academic & Student Life"](https://my.olin.edu/ICS/Academic__Student_Life/) tab. -3. Click on ["Course Evaluations"](https://my.olin.edu/ICS/Academic__Student_Life/Course_Evaluations.jnz). - -## If you don't know your Olin login information - -Visit the [Olin wiki: cross-registered students](http://wikis.olin.edu/it/doku.php?id=cross_registered_students) for more information. diff --git a/_activities/course-feedback.md b/_activities/course-feedback.md deleted file mode 100644 index 3b290fa7..00000000 --- a/_activities/course-feedback.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Additional Course Feedback -date: 2017-12-13 08:00:00 -05:00 -end_date: 2018-01-03 23:59:59 -05:00 -inline: true ---- - -Please take a moment to complete the [Course Survey Supplement](https://goo.gl/forms/6ZfBngQ5UZ2lB44s1). diff --git a/_activities/final-project-teaming.md b/_activities/final-project-teaming.md deleted file mode 100644 index 94175e17..00000000 --- a/_activities/final-project-teaming.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -date: 2017-10-30 09:00:00 -04:00 -title: Final Project Team Formation -spreadsheet_url: https://docs.google.com/spreadsheets/d/1HtPkvLfhCo9cfIQAKojzhBqLgJMWCkaqQx73rdoPrTU/edit?usp=sharing ---- - -Today in class we will [form teams]({% link _assignments/final-project.md %}#teaming) for the [Final Project]({% link _assignments/final-project.md %}). - -## Ideation and Teaming - -Add your ideas to the [Final Project Ideas sheet](https://docs.google.com/spreadsheets/d/1kYvrMXWHGb_SfdCCC3TVrgLXR4j4L7GO9O9xyi4p9Lc/edit?usp=sharing). diff --git a/_activities/geometry-classes.md b/_activities/geometry-classes.md deleted file mode 100644 index a0580041..00000000 --- a/_activities/geometry-classes.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -date: 2017-10-16 09:00:00 -04:00 -omit_title: true ---- - -{% include toc %} - -## In-Class Exercise: Geometry Classes - -In this exercise, you will define methods for `Line` and `Rect` geometry -classes. - -Save the file -[`geometry.py`]({% link files/activities/geometry-classes/geometry.py %}) -to your file system, and modify it so that the doctests pass: - -```bash -python geometry.py -``` - -In order to run the doctests for a _single_ method, comment out -`doctest.testmod` and un-comment `doctest.run_docstringexamples` at the end of -the file: - -```python -doctest.testmod() -# doctest.run_docstringexamples(Line.__repr_, globals()) -``` - -→ - -```python -# doctest.testmod() -doctest.rundocstring_examples(Line._repr_, globals()) -``` - -You can use the `Point` class from the reading, but you are not required to. - -Two of the methods in this file, `Line.intersection` and `Rect.intersection`, have their doc tests commented out. -(Yes, they're commented out within a comment.) -You don't need to implement these. They're the subject of the third _Going Beyond_ exercise, below. - -Think about: - -1. A rectangle conceptually has _left_, _right_, _top_, and _bottom_ coordinates, as well as _width_ and _height_. How many of these do you need to store, and how many can be calculated? Which ones will make the implementation of the class methods simpler? -2. Line's initialization method takes two _x_ coordinates in either order (x0 < x1, or x1 < x0). Is there work you could do when you initialize the object, that would make it easier to implement the methods. -3. What are the pros and cons of adding a `Square` class? - -You're encouraged to think about the first two questions before or while you -perform this exercise. Think about the last question afterwards, if you have -time. - -_If you have time_, you can extend your work in any of the following -directions. Any of these can be done independently of the others. - -### Going Beyond 1: Duck Typing - -_Skills emphasized: object-oriented programming (classes); polymorphism (“duck typing”)._ - -Save the file -[`geometry_beyond_1.py`](https://raw.githubusercontent.com/{{ site.github.owner_name }}/{{ site.github.owner_name }}.github.io/master/files/activities/geometry-classes/geometry_beyond_1.py), -implement the methods of the `Circle` class, and implement the function `stochastic_area`. -`stochastic_area` should work on either a Rect or a Circle. - -Some things to think about: - -* How close is `stochastic_area`'s return value to Rect and Circle's area methods? -* What needs to be true of a class for `stochastic_area` to work on it? -* Are there additional classes that would be simple to implement, that you could apply stochastic_area to? -* When would you use `stochastic_area` instead of just `area`? - -### Going Beyond 2: PyGame - -_Skill emphasized: computer graphics._ - -Save the file -[`geometry_beyond_2`.py](https://raw.githubusercontent.com/{{ site.github.owner_name }}/{{ site.github.owner_name }}.github.io/master/files/activities/geometry-classes/geometry_beyond_2.py), -and modify the implementation of `draw_shapes` to attend to its argument (a -list of shapes). - -### Going Beyond 3: Geometry algorithms - -_Skill emphasized: computation geometry and computer algorithms._ - -You guessed it: un-comment the test cases in `Line.intersection` and -`Rect.intersection` and make them pass. - -Think about: - -* What should `Line.intersection` and `Rect.intersection` do when the two lines or rectangles don't intersect? Can you think of several answers? – what are their pro and cons? - -### Going Beyond 4: Test Case Design - -_Skill emphasized: software engineering._ - -Think about the mistakes a non-malicious programmer could make while -implementing these methods. Do the test cases detect these mistakes? What -would you add? - -You may do this exercise by drawing lines, squares, and points on a piece of -paper, instead of covering coordinates to numbers. diff --git a/_activities/modular-design.md b/_activities/modular-design.md deleted file mode 100644 index bbbd1b4f..00000000 --- a/_activities/modular-design.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Exploring modular design -date: 2017-10-05 10:50:00 -05:00 ---- - -In small groups, review the [solutions from the class](https://github.com/sd17fall/ReadingJournal-Solutions/blob/master/reading-journal-1-solutions.ipynb##Exercise-3.3) to the Exercise 3.3. - -What aspects of these different designs: - -* Increased / decreased the readability of code (readability means your ability to easily deduce what the code does, how it works, and whether or not it is correct). -* Increased / decreased the flexibility of the code (flexibility means the ability of this code to be easily modified to satisfy new requirements that may arise. - -In groups, redo Chapter 3 Exercise 5 based on the design that your group -decides is most readable and most flexible. - -In a surprise move, your manager has asked you to implement two new features -for your program. - -1\. Write a function that draws the following grid: - - + - - - - + - - - - + - - - - + - - - - + - - - - + - | | | | | | - | | | | | | - | | | | | | - | | | | | | - + - - - - + - - - - + - - - - + - - - - + - - - - + - | | | | | | - | | | | | | - | | | | | | - | | | | | | - + - - - - + - - - - + - - - - + - - - - + - - - - + - | | | | | | - | | | | | | - | | | | | | - | | | | | | - + - - - - + - - - - + - - - - + - - - - + - - - - + - -2\. Modify your function to take in two additional inputs that specify the -dimensions of width and height (in characters) of each of the boxes that -compose the grid. For instance, - -`grid(5, 3)` produces: - - + - - + - - + - - + - - + - - + - | | | | | | - | | | | | | - + - - + - - + - - + - - + - - + - | | | | | | - | | | | | | - + - - + - - + - - + - - + - - + - | | | | | | - | | | | | | - + - - + - - + - - + - - + - - + diff --git a/_activities/setup.md b/_activities/setup.md index 3648204d..fb97e980 100644 --- a/_activities/setup.md +++ b/_activities/setup.md @@ -1,12 +1,10 @@ --- title: Set Up Your Development Environment -date: 2017-08-31 10:50:00 -04:00 +date: 2018-01-23 15:10:00 -04:00 --- {% include toc %} -## Keep Calm and SoftDes On - Before we can get down to the business, we need to make sure we have the right tools for the job. If you follow these instructions (with help from our amazing NINJA team), your computer will be primed and ready to do some serious computational work. Initially, the amount of new stuff here may seem intimidating. Please do not let this discourage you! We (NINJAs and faculty) will provide lots of help and guidance along the way to help you setup, and then gain comfort with your new toolset. The process will start at the end of the first class, and will continue with additional NINJA / faculty office hours to help you complete the process successfully. Additionally, you will gain familiarity and comfort with this toolset as the semester progresses. In other words, you should think of learning the toolset as a process and not something that you need to do all at once. @@ -15,7 +13,63 @@ Initially, the amount of new stuff here may seem intimidating. Please do not let The instructions below will allow you to setup the “officially supported” environment for SoftDes. Some deviations from the setup below are okay while others are not (when in doubt please ask). That being said, it will likely be more difficult for us to help you debug problems with your setup if you have a nonstandard environment. -## Step 1: Install Python +## Step 1: Install Ubuntu + +Our officially supported OS is Ubuntu 16.04.3 64-bit ([link to ISO](http://releases.ubuntu.com/16.04/ubuntu-16.04.3-desktop-amd64.iso) - huge file). There are two ways configure Ubuntu on your computer: dual boot and virtual machine. + +### Dual Boot (preferred) + +The preferred method for installing Ubuntu is to use what's known as a dual boot. In this setup, you will have Ubuntu installed alongside Windows. Upon startup of your computer, you will be able to choose which OS to boot into. If you are going to be using a dual boot setup, the easiest way to get up and running is to use one of the provided SoftDes thumb drives. These thumb drives have been pre-loaded with a bootable installer for Ubuntu 16.04.3. + +#### Creating Space for an Ubuntu Partition + +In order to install Ubuntu on your computer, you will need to create a partition on your disk drive. Luckily, Ubuntu's installer can do most of this for you, however, this will only work if you have unpartitioned space on your drive. The easiest way to create unpartitioned space on your drive is to shrink the size of your Windows partition. In this way, unused drive space that is currently allocated to Windows will now be allocated to Ubuntu. + +To shrink your Windows volume, you need to open up the Windows "Disk Management" utility. The easiest way to do this is to click the Windows button in the lower lefthand corner of the screen and enter "diskmgmt.msc" into the box and press enter. Once you are in the Disk Management utility, check to see if you have any unallocated (or unpartitioned space). If you do (about 50 GB is a good number), there is no need to do anything. If you don't (which is the likely case), click on the largest partition and then click the "Shrink Volume" button. This button will prompt you to enter how much you'd like to shrink your volume by. We recommend choosing at least 50GB (you will enter 50,000 into the utility since it uses MB as its default units). Once you have shrunk your volume, you will now have space to use for installation of Ubuntu. + +Before beginning the Ubuntu install, you should restart your computer to make sure that Windows has a chance to scan the new partition and update its boot loader. + +#### Installing from the Bootable USB Drive + +Next, insert the thumb drive, reboot your computer, and hold the F12 key before your computer starts to load Windows. Depending on your system, one of two things will happen. If you have an Olin first-year laptop, you will be able to select which device you'd like to boot from (go ahead and select the USB drive). If you have another type of system, you may see your computer's BIOS menu. Use the arrow keys to select boot from "USB Storage Device". If everything has gone properly, you will see a menu with entries such as "Install Ubuntu" and "Try Ubuntu". Select "Install Ubuntu" and the installation process will begin. + +Most of the Ubuntu installation should proceed without much intervention on your part. Here are a few things to keep in mind. + +1. When it asks you what type of installation you'd like, make sure to select the option that says something like "install Ubuntu beside Windows". +2. Don't worry about connecting to a network during install (you can click the box that says "Don't connect to a network"). +3. Click the option "Install 3rd Party Software" + +Once you've booted into Ubuntu, the first thing you'll probably want to do is get setup with the wireless. For your convenience, we have copied the instructions from IT's Linux Wiki on how to sign into the Olin network. + +> Wireless configuration: +> 1. Click the NetworkManager icon in the system tray, which is normally just to the left of the speaker icon. +> 2. Select the OLIN wireless network. +> 3. Set Authentication to Protected EAP (PEAP). +> 4. In the Username: field, enter your Windows username followed by “@olin.edu”. Note that this is not your email address! For example, Joe Student would enter jstudent@olin.edu. +> 5. In the Password: field, enter your Windows password. +> 6. Click Connect. +> 7. You will receive a warning reading “No Certificate Authority certificate chosen”. Click the box to the left of Don't warn me again to ignore future warnings and click Ignore. + +### Virtual Machine + +Another option is to use a [virtual machine](https://en.wikipedia.org/wiki/Virtual_machine). In this variant you will run Ubuntu inside of a window inside of the Windows operating system (or Mac OSX if that is what you have). We will also have thumb drives on hand that can be used to install Ubuntu as a virtual machine. We recommend the freely available program [Virtual Box](https://www.virtualbox.org/) if you are running a VM. Here are some guidelines to follow if you wind up using a VM. + +1. Make sure to allocate at least 2 CPUs (preferably 4) and at least 2 GB (preferably 4GB) of RAM to your Ubuntu VM. +2. If you are using VirtualBox, make sure to install the VirtualBox Guest Additions once your Ubuntu is up and running. +3. If you are using VirtualBox and are experiencing sluggish performance, [consider checking the "Use Host I/O Cache" box](https://www.electricmonk.nl/log/2016/03/14/terrible-virtualbox-disk-performance/) in the settings. + +### Post Installation Configuration + +To make sure your installation is up to date, you should run the following commands at the Linux terminal. To open the terminal you can click on the "Search Your Computer" button in the top left of the Ubuntu desktop and type "terminal". Note: that we use the convention of preceding a terminal command with the dollar sign (you don't actually need to type the dollar sign into the terminal). + +```bash +$ sudo apt-get update +$ sudo apt-get upgrade +``` + +You may find [IT's instructions](http://wikis.olin.edu/linux/doku.php) useful for completing tasks such as setting up printers and the like (warning: these are somewhat out of date). + +## Step 2: Install Python [Adapted from _Modeling and Simulation in Python_, by Allen Downey.] @@ -25,27 +79,34 @@ You could update Python and install these libraries, but I strongly recommend th Anaconda is available for Linux, macOS, and Windows. By default, it puts all files in your home directory, so you don’t need administrator (root) permission to install it, and if you have a version of Python already, Anaconda will not remove or modify it. -To install Anaconda, visit the [Anaconda install page](http://docs.continuum.io/anaconda/install.html). +To install Anaconda, visit the [Anaconda install page](http://docs.continuum.io/anaconda/install.html). One quick note is that at the end of the install process you will be asked whether to prepend the path to anaconda to your `.bashrc` file. You should select 'yes' to this prompt. As the installer says, you will then need to open a terminal for this change to take effect. -## Step 2: Verify Jupyter +## Step 3: Verify Jupyter -Run `jupyter -h` verify that Jupyter is installed. +Run `jupyter -h` to check if Jupyter is installed. -When you install Anaconda, you should get Jupyter by default, but if not, run +If Jupyter was not installed automatically with Anaconda, you should run - conda install jupyter + $ conda install jupyter -## Step 3: Get Started with Git +## Step 4: Get Started with Git -We will make heavy use of Git (and GitHub in this class). Haven’t heard of Git? That’s totally fine (and totally expected)! Before we do some course specific Git stuff, take some time to read [Chapter 1](https://github.com/AllenDowney/amgit/blob/master/en/01-introduction/01-chapter1.markdown) of Allen’s excellent online book called AmGit. +We will make heavy use of Git (and GitHub in this class). Haven’t heard of Git? That’s totally fine (and totally expected). Before we do some course-specific Git stuff, take some time to read [Chapter 1](https://github.com/AllenDowney/amgit/blob/master/en/01-introduction/01-chapter1.markdown) of Allen’s excellent online book called AmGit. ### Install Git -Git may already be installed on your system. Enter `git --version` into a terminal window to test. If this prints something like `git version 2.14.1`, you are good to go. (The exact number doesn't matter, so long as it's 2.something.) +If you just installed Ubuntu, you will need to install Git using the instructions below. If you had an existing Ubuntu installation, Git may already be installed on your system. Enter `git --version` into a terminal window to test. If this prints something like `git version 2.14.1`, you are good to go. (The exact number doesn't matter, so long as it's 2.something.) + +Otherwise, you can install it from the terminal by running the command +```bash +$ sudo apt-get install git +``` -Otherwise, download and install git from the [git download page](https://git-scm.com/download/). +Set up your Git identity by following the instructions in [Chapter 1](https://github.com/AllenDowney/amgit/blob/master/en/01-introduction/01-chapter1.markdown#first-time-git-setup). +{::comment} If you are a macOS user and you are using [homebrew](https://brew.sh), you can run `brew install git` instead of download git from the download page. If you don't know what this means, use the download page. +{:/comment} ### Create a GitHub Account @@ -71,7 +132,7 @@ Now that you have the basic idea of what version control is and what it is good > > It is probably a good idea to think of everything you do on GitHub as part of your public professional reputation. -### Step 4. Get the Reading Journal +### Get the Reading Journal We will be using GitHub for a number of use cases in the class. @@ -81,32 +142,33 @@ We will be using GitHub for a number of use cases in the class. Since there’s reading due next class, you will need to perform the steps below to setup your personal `ReadingJournal` repository. -1. Click on the invitation link +1. Click on the invitation link <{{ site.data.github.reading_journal_invite }}> 2. Click the green button “Accept this assignment”. -3. Follow the remaining instructions until you get to your repository page. It will looks something like this , except with your GitHub user id instead of `myname`. -4. ***Clone the repository*** by typing the following into your terminal program. Replace `myname` with your GitHub user id. +3. Follow the remaining instructions until you get to your repository page. It will looks something like , except with your GitHub user id instead of `myname`. +4. Clone the repository to your computer by typing the following into your terminal program. Replace `myname` with your GitHub user id. ```bash -$ git clone git@github.com:sd17fall/ReadingJournal-myname.git ReadingJournal +$ git clone https://github.com/{{ site.data.github.organization }}/ReadingJournal-myname.git ReadingJournal ``` -Now you have a copy of the ReadingJournal folder (directory) on your drive. Use the terminal, macOS Finder, Windows Explorer, or Ubuntu File Manager to verify that it is present. +Now you have a copy of the ReadingJournal folder (directory) on your drive. Use the terminal{::comment}, macOS Finder, Windows Explorer,{:/comment} or Ubuntu File Manager to verify that it is present. Next, you can fire up Jupyter notebook and load the reading journal for day X. ```bash $ cd ReadingJournal -$ jupyter notebook reading-journal-1.ipynb +$ jupyter notebook reading-journal-01.ipynb ``` If all goes well, this should bring up a web-browser with the reading questions. ## Step 5. Install Atom -1. [Download and install](http://flight-manual.atom.io/getting-started/sections/installing-atom/) the [Atom text editor](https://atom.io) onto your computer. +1. [Download and install](http://flight-manual.atom.io/getting-started/sections/installing-atom/) the [Atom text editor](https://atom.io) onto your computer. Note: if you have a brand new install of Ubuntu, you may need to run `sudo apt-get install curl` before following these instructions. 2. Follow the [Atom Basics](http://flight-manual.atom.io/getting-started/sections/atom-basics/) instructions to create a text file and save it. 3. Follow the [Atom Packages](http://flight-manual.atom.io/using-atom/sections/atom-packages/) instructions to find and install the following packages: `python-tools`, `trailing-spaces`, `Hydrogen`. +{::comment} On Windows, if you see an error like this: ![](/images/setup/error_python-tools_480.jpg) @@ -120,3 +182,4 @@ Then do the following: * Find the "python-tools" package * Click Settings. * In the “Path to python directory” setting, paste the path from 1., *without* the final `python.exe`: for example, `C:\Users\MYNAME\AppData\Local\Continuum\Anaconda3\python.exe` +{:/comment} diff --git a/_assignments/assignment-1.md b/_assignments/assignment-1.md index 900a04a6..1ddda7b7 100644 --- a/_assignments/assignment-1.md +++ b/_assignments/assignment-1.md @@ -1,26 +1,33 @@ --- title: Assignment 1 -due: 2017-09-07 09:00:00 -04:00 +due: 2018-01-26 13:30:00 -04:00 --- -## Required -Due 9am Thursday 7 September. +{::comment} +Removed: +* Read [Holding a Program in One's Head](http://paulgraham.com/head.html), Paul Graham. +MASH joke: [**But first**](https://www.youtube.com/watch?v=UcaWQZlPXgQ) +{:/comment} -* Complete the [course entrance survey](https://goo.gl/forms/JHSocQE14iEVBnHc2) before class on Thursday. This counts towards your participation grade. -* Use [this link](https://join.slack.com/t/sd17fall/shared_invite/MjMzOTgyNjM5OTA5LTE1MDQxMDA3NDktYTQzMzg5OGUyZg) to join the Slack team. +## Read * Familiarize yourself with the [Course Policies]({% link pages/policies.md %}). -* Read [_Think Python_](http://greenteapress.com/wp/think-python-2e/) chapters 1-3. [**But first**](https://www.youtube.com/watch?v=UcaWQZlPXgQ) note what time you started reading, and what time you stopped. (Please do this for all the readings.) You will use this to avoid working longer than required by the course policy. Also, the reading journal notebook asks how long you spent on the readings and notebook questions – we will use this to callibrate the course work. -* Read Think Python [chapter 5](http://greenteapress.com/thinkpython2/html/thinkpython2006.html): sections 5.2-5.7 and section 5.11. -* Read [Holding a Program in One's Head](http://paulgraham.com/head.html), Paul Graham. +* [_Think Python_](http://greenteapress.com/wp/think-python-2e/) chapters 1-3. Don't just sit back and read passively, get your hands on the keyboard using your Reading Journal (see below)! +Note the times you start and stop reading (please do this for all the readings). You will use this to avoid working longer than required by the course policy. Also, the reading journal notebook asks how long you spent on the readings and notebook questions – we will use this to calibrate the course work. +* Think Python [chapter 5](http://greenteapress.com/thinkpython2/html/thinkpython2006.html): sections 5.2-5.7 and section 5.11. + +## Do +* Make sure to finish up any activities that you didn't get to from the [Day 1 materials](/notes/day-1). +* Complete the [course entrance survey](https://goo.gl/forms/5AEwQVWbFzQSHWB43) before class on Friday. This counts towards your participation grade. +* Complete Reading Journal 1. Follow [these instructions]({{site.baseurl}}{% link pages/reading-journal.md %}) to submit it. +* Use [this link](https://join.slack.com/t/softdes/signup?x=x-303627938934-302893055029) to join the Slack team. * Send a message to the `#general` channel of the [Slack](http://sd17fall.slack.com) team. This counts towards your participation grade. You can do any of the following: * Ask a question. * Answer a question that someone has asked. * Post a computing-related link or news item. * Say "Hi" or "Present". -* Complete Reading Journal 1. Follow [these instructions]({% link pages/reading-journal.md %}) to submit it. ## Optional (fun) reading -* [“In the beginning was the command line”](http://www.mit.edu/~yandros/doc/command.txt), Neal Stephenson * [xkcd #353](https://xkcd.com/353/), and [xkcd #353 explained](https://www.explainxkcd.com/wiki/index.php/353:_Python) +* [“In the beginning was the command line”](http://www.mit.edu/~yandros/doc/command.txt), Neal Stephenson diff --git a/_assignments/assignment-10.md b/_assignments/assignment-10.md index 005085f6..84476d38 100644 --- a/_assignments/assignment-10.md +++ b/_assignments/assignment-10.md @@ -1,10 +1,17 @@ --- title: Assignment 10 -due: 2017-10-12 9:00:00 -04:00 +due: 2018-03-02 09:00:00 -04:00 --- -* Read [Storing API keys]({% link _notebooks/storing-api-keys.md %}) -* Read [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/) -* Complete *Reading Journal 9*. +## Read + * [How to write a Git commit message](https://chris.beams.io/posts/git-commit/) + * [Check In Early, Check In Often](https://blog.codinghorror.com/check-in-early-check-in-often/) + * Choose one of the class [Git resources](/resources/#git) (or another one you like) and learn something new (time budget: 30 minutes). One topic that will become more relevant as we start working with partners is resolving merge conflicts. + * Review Think Python as necessary + + +## Do + * Complete [Reflection and Teaming Survey 2](https://goo.gl/forms/C5Lv97hbB5s5SfXW2) +* (Optional) If you'd like to share your MP3 work with the class, make sure to put a slide describing what you did in our [shared Slides presentation](https://docs.google.com/presentation/d/1dRYZskFKM5zbMYOoCEtzrDjY9pzSfe0omhXNN9dbbDE/edit?usp=sharing). + * No Reading Journal exercises -[![](https://imgs.xkcd.com/comics/git_commit.png)](https://xkcd.com/1296/) diff --git a/_assignments/assignment-11.md b/_assignments/assignment-11.md index 43707126..9e5c5414 100644 --- a/_assignments/assignment-11.md +++ b/_assignments/assignment-11.md @@ -1,12 +1,13 @@ --- title: Assignment 11 -due: 2017-10-16 10:50:00 -04:00 +due: 2018-03-06 09:00:00 -04:00 --- -* Bring your [MP4 project proposal]({% link _assignments/mini-project-4-interactive-visualization.md %}#project-proposal) -* Read _Think Python_ [Chapter 16](http://greenteapress.com/thinkpython2/html/thinkpython2017.html), [Chapter 17](http://greenteapress.com/thinkpython2/html/thinkpython2018.html) -* Bring your `geometry.py` from [Thursday's activity]({% link _activities/geometry-classes.md %}). You don't need to work further on it outside of class or turn it in – although if you want to work on the Going Beyond sections, you may want to get a head start. +## Read + * Think Python Chapter [18](http://www.greenteapress.com/thinkpython/html/thinkpython019.html) -## (Way) Before Class -* By Friday evening, you should have entered your partner and project on the spreadsheet, per [MP4 instructions]({% link _assignments/mini-project-4-interactive-visualization.md %}#getting-started). \ No newline at end of file +## Do + * Complete Reading Journal 11. (Note: There is no 10, numbering tracks with class day assigned) + * Submit MP4 project proposal and bring a printed copy to next class + diff --git a/_assignments/assignment-12.md b/_assignments/assignment-12.md deleted file mode 100644 index 7a30dad7..00000000 --- a/_assignments/assignment-12.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Assignment 12 -due: 2017-10-19 09:00:00 -04:00 -teaming_spreadsheet: https://docs.google.com/spreadsheets/d/1pykAoJBFgz-e2yGLKbuBznSJ0mt0LGpgUFRxckxxcQg/edit?usp=sharing ---- - -* Review _Think Python_ [Chapter 15](http://greenteapress.com/thinkpython2/html/thinkpython2016.html), [Chapter 16](http://greenteapress.com/thinkpython2/html/thinkpython2017.html), [Chapter 17](http://greenteapress.com/thinkpython2/html/thinkpython2018.html) -* Review _Think Python_ [Chapter 14.9](http://greenteapress.com/thinkpython2/html/thinkpython2015.html#sec173) “Writing Modules”. - -By end of class today: - -* The [MP4 team spreadsheet]({{ teaming_spreadsheet}}) must contain a link to your team's repo. - -By {{ page.due | date: site.due_datetime_format }}: - -* Your MP4 GitHub repo should contain (at least) two files such that: - * One file defines a function, or class that (you think will) be used in your project. - * The other file `import`s the first file, and uses the function or class that it defines. diff --git a/_assignments/assignment-13.md b/_assignments/assignment-13.md index 2cbe0302..33a7bab8 100644 --- a/_assignments/assignment-13.md +++ b/_assignments/assignment-13.md @@ -1,15 +1,12 @@ --- title: Assignment 13 -due: 2017-10-23 09:00:00 -04:00 +due: 2018-03-12 09:00:00 -04:00 --- -* Read [Check In Early, Check In Often](https://blog.codinghorror.com/check-in-early-check-in-often/). (Jeff Atwood is the co-creator of *Stack Overflow*. You may have heard of it.) - * Optional reading: [How Often do you Commit?](http://www.howardism.org/Technical/Git/how-often.html), Howard Abrams -* Review [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/). -* Complete Reading Journal 10. -* Make at least one additional commit per person. If you are pair programming, both commits may come from the same account. - * In general, you should make *at least one commit* per day that you're working on the project. See the readings for more guidance. Thinking about what makes for a good commit *message* can guide you towards the amount of change that makes for a good *commit*. +## Read + * Think Python Chapter Appendix B (up to and including section B.2). Section B after B.2 is optional. [B2](http://greenteapress.com/thinkpython2/html/thinkpython2022.html) -## By 10:30am Monday -* [Mid-project check-in](/assignments/mini-project-4-interactive-visualization.html#mid-project-check-in) +## Do + * Complete Reading Journal 13. (Note: There is no 12, numbering tracks with class day assigned) + * Continue to work on MP4 diff --git a/_assignments/assignment-14.md b/_assignments/assignment-14.md deleted file mode 100644 index 36e1ccec..00000000 --- a/_assignments/assignment-14.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Assignment 14 -due: 2017-11-02 10:50:00 -04:00 -spreadsheet_url: https://docs.google.com/spreadsheets/d/1HtPkvLfhCo9cfIQAKojzhBqLgJMWCkaqQx73rdoPrTU/edit?usp=sharing ---- - -## Create a GitHub Repo - -Create a GitHub repo for your project. - -Add your team members to the repo. - -Place these files in the repo: - -* A [`.gitignore` file]({% link pages/recipes.md %}#gitignore-ignoring-files). This file should contain at least the line `*.pyc`. -* A project proposal. - -## Create a Trello Board - -Create a [Trello board](https://trello.com). Add your team mates and the professor and NINJAs: - -{% for person in site.data.team %} -* {{ person.first_name }} -{% endfor %} - -In class on Thursday we will finish setting this up. - -## Register your team - -Add your team, a link to your repo, and a link to your Trello board, to the [final project spreadsheet]({{ page.spreadsheet_url }}). - -## Project Proposal - -Create a [Final Project Project]({% link _assignments/final-project.md %}#project-proposal) document. diff --git a/_assignments/assignment-15.md b/_assignments/assignment-15.md deleted file mode 100644 index 33100396..00000000 --- a/_assignments/assignment-15.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Assignment 15 -due: 2017-11-27 09:00:00 -04:00 ---- - -* Read _Think Python_ [Appendix B](http://greenteapress.com/thinkpython2/html/thinkpython2022.html) (through B.2) -* Read ["The Surgical Team"]({% link files/readings/The_Surgical_Team.pdf %}), Fred Brooks, _The Mythical Man-Month_, Addison-Wesley (August 12, 1995). -* Complete Reading Journal 11. - -## Due this Thursday 17 November - -* [Final Project presentation]({% link _assignments/final-project.md %}#project-presentation) diff --git a/_assignments/assignment-16.md b/_assignments/assignment-16.md deleted file mode 100644 index a1577ab7..00000000 --- a/_assignments/assignment-16.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Assignment 16 -due: 2017-11-30 09:00:00 -05:00 ---- - -* Read ["Technical Debt"](https://martinfowler.com/bliki/TechnicalDebt.html), Martin Fowler. -* Read ["TechnicalDebtQuadrant"](https://martinfowler.com/bliki/TechnicalDebtQuadrant.html), Martin Fowler. -* Read _Thing Python_ [Chapter 19 "The Goodies"](http://greenteapress.com/thinkpython2/html/thinkpython2020.html). -* Review _Think Python_ [Section 14.5 Catching Exceptions](http://greenteapress.com/thinkpython2/html/thinkpython2015.html#sec169). -* Here are three different explanations of exceptions. Read as many or as few as useful to understand the concept. You can also review the [SoftDes class notes]({% link _notebooks/exceptions.md %}). - * [Python Tutorial 8.2-8.5](https://docs.python.org/3/tutorial/errors.html#exceptions). (You may also be interested in: 8.6-8.7.) - * [Python Exception Handling - Try, Except and Finally](https://www.programiz.com/python-programming/exception-handling), Python by Programiz - * [Python Custom Exceptions](https://www.programiz.com/python-programming/user-defined-exception), Python by Programiz -* Complete Reading Journal 12. - -## By the end of class on Thursday -* Complete the [Final Event survey](https://goo.gl/forms/IGfqZvK7RFw8Oj0K2). diff --git a/_assignments/assignment-17.md b/_assignments/assignment-17.md deleted file mode 100644 index 23505b2b..00000000 --- a/_assignments/assignment-17.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Assignment 17 -due: 2017-12-04 10:50:00 -05:00 ---- - -* Read PurpleBooth's ["README Template"](https://gist.github.com/PurpleBooth/109311bb0361f32d87a2) -* Read the ["18F Open Source Guide: Making READMEs Readable"](https://open-source-guide.18f.gov/making-readmes-readable/) -* Read GitHub's ["Starting an Open Source Project: Writing a README"](https://opensource.guide/starting-a-project/#writing-a-readme) - -## Due 5pm - -* [Final Project: Website]({% link _assignments/final-project.md %}#project-website) diff --git a/_assignments/assignment-2.md b/_assignments/assignment-2.md index e67e5974..d3c0346e 100644 --- a/_assignments/assignment-2.md +++ b/_assignments/assignment-2.md @@ -1,29 +1,13 @@ --- title: Assignment 2 -due: 2017-09-11 09:00:00 -04:00 +due: 2018-01-30 13:30:00 -04:00 --- -## Required -Due 9 am Monday 11 Sep. +## Read +* Think Python [chapter 6.1-6.4](http://greenteapress.com/thinkpython2/html/thinkpython2007.html) +* Think Python [chapter 7.1-7.4](http://greenteapress.com/thinkpython2/html/thinkpython2008.html) -* Read *Think Python* [Chapter 6.1-6.4](http://greenteapress.com/thinkpython2/html/thinkpython2007.html) and [Chapter 7.1-7.4](http://greenteapress.com/thinkpython2/html/thinkpython2008.html). -* Complete *Reading Journal 2*. Follow the instructions on the [Reading Journal]({% link pages/reading-journal.md %}) page. -* Complete the 2.2 Handout ([PDF]({% link files/handouts/day2/day2-activity2.pdf %}); [HTML]({% link files/handouts/day2/day2-activity2.html %})). Bring this to class on Monday. **Note:** The version distributed in class, and available on the web until 7:40pm Thursday, had the following issues. These are fixed in the version in the link. - * *Q1 Testing* wrote `"True"` and `"False"` but the code uses `"Yes"` and `"No"` - * *Q3 Whitebox Testing* was missing the problem text. -* [Download and install](http://flight-manual.atom.io/getting-started/sections/installing-atom/) the [Atom text editor](https://atom.io) onto your computer. -* Follow the [Atom Basics](http://flight-manual.atom.io/getting-started/sections/atom-basics/) instructions to create a text file and save it. -* Follow the [Atom Packages](http://flight-manual.atom.io/using-atom/sections/atom-packages/) instructions to find and install the following packages: `python-tools`, `trailing-spaces`, `Hydrogen`. - -## Coming Up - -[For Thursday 14 Sep] - -* Read [Growing a Language](https://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf), Guy Steele (no relation), pp. 1-4. - * This lecture is also available [as a video](https://www.youtube.com/watch?v=_ahvzDzKdB0). -* *Reading Journal 3* will be released on Monday. - -## Optional (fun) Reading - -* [In The Beginning Was the Command Line](http://ace.gearnine.com/temp/command.pdf), Neal Stephenson (author of *Snow Crash* and *Cryptonomicon*) +## Do +* Complete Reading Journal 2. Follow [these instructions]({{site.baseurl}}{% link pages/reading-journal.md %}) to pull the new assignment from upstream and submit it. +* Reach out to course staff if you haven't completed setting up your environment. diff --git a/_assignments/assignment-3.md b/_assignments/assignment-3.md index f40ccda9..a259a24b 100644 --- a/_assignments/assignment-3.md +++ b/_assignments/assignment-3.md @@ -1,13 +1,14 @@ --- title: Assignment 3 -due: 2017-09-14 09:00:00 -04:00 +due: 2018-02-02 13:30:00 -04:00 --- -* Read *Think Python* [Chapter 8](http://www.greenteapress.com/thinkpython2/html/thinkpython2009.html) and [Chapter 10.1-10.6](http://www.greenteapress.com/thinkpython2/html/thinkpython2011.html). -* Complete *Reading Journal 3*. -* Read [Growing a Language](https://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf), Guy Steele (no relation), pp. 1-4. - * This lecture is also available [as a video](https://www.youtube.com/watch?v=_ahvzDzKdB0). -* Start working on Mini Project 1 Gene Finder. -Optional: -* [In The Beginning Was the Command Line](http://ace.gearnine.com/temp/command.pdf) +## Read +* Think Python [chapter 8](http://greenteapress.com/thinkpython2/html/thinkpython2009.html) +* Think Python [chapter 10.1-10.6](http://greenteapress.com/thinkpython2/html/thinkpython2011.html) +* [Holding a Program in One's Head](http://paulgraham.com/head.html), Paul Graham. _Note: This 2007 piece has useful insights about programming but refers to the programmer throughout as "he" - please mentally replace with "they" or your favorite gender-nonspecific pronoun._ + +## Do +* Complete Reading Journal 3. +* Complete [Mini-project 1, part 1](/assignments/mini-project-1-gene-finder.html#week-1) diff --git a/_assignments/assignment-4.md b/_assignments/assignment-4.md index cafa0ed6..b7ee2557 100644 --- a/_assignments/assignment-4.md +++ b/_assignments/assignment-4.md @@ -1,12 +1,12 @@ --- title: Assignment 4 -due: 2017-09-18 09:00:00 -04:00 +due: 2018-02-06 09:00:00 -04:00 --- -* Finish *Think Python* [Chapter 10](http://www.greenteapress.com/thinkpython2/html/thinkpython2011.html). -* Complete *Reading Journal 4* (released Thursday evening). -* Complete Mini Project 1 Gene Finder. Check this off with a NINJA before class on Monday. -*Due 8 pm, Tue 19 Sep* +## Read +* Finish Think Python [chapter 10](http://greenteapress.com/thinkpython2/html/thinkpython2011.html) +* [Linux at Olin](/files/notes/linux.pdf) by Allen Downey, through 2.10. The first chapter should be largely review from our Day 1 exercises. -* Complete *Reading Journal 3*, if you didn't already. +## Do +* Complete Reading Journal 4. diff --git a/_assignments/assignment-5.md b/_assignments/assignment-5.md index 35b07af0..68082dc1 100644 --- a/_assignments/assignment-5.md +++ b/_assignments/assignment-5.md @@ -1,29 +1,22 @@ --- title: Assignment 5 -due: 2017-09-21 09:00:00 -04:00 +due: 2018-02-09 09:00:00 -04:00 --- -* Read *Think Python* [Chapter 4](http://www.greenteapress.com/thinkpython2/html/thinkpython2005.html). -* Complete *Reading Journal 5*. -## Reading journal instructions +## Read +* Think Python [chapter 4](http://greenteapress.com/thinkpython2/html/thinkpython2005.html) -1\. The reading journal refers to `rj5.py`; it means `shapes.py`. +## Do +* Submit Mini Project 1 by pushing your work to your repository. +* Complete Reading Journal 5. -2\. Commit your Python files, that end in `.py`, as well as the notebook. Use the following recipe. +In order to submit RJ5, you need to commit your work in `shapes.py` as well: -```bash +```python $ cd ReadingJournal -$ git add reading-journal-*.ipynb -$ git add *.py +$ git add reading-journal-05.ipynb +$ git add shapes.py $ git commit -m "Completed reading journal 5" $ git push origin master ``` - -(In the recipe above, the command `git add *.py` has been added to the instructions from the [Reading Journal page]({% link pages/reading-journal.md %}).) - -## Reading Journal 3 (extended deadline) - -*Due 8 pm, Tue 19 Sep* - -* Complete *Reading Journal 3*, if you didn't already. diff --git a/_assignments/assignment-6.md b/_assignments/assignment-6.md index d49eb485..f0b99c8e 100644 --- a/_assignments/assignment-6.md +++ b/_assignments/assignment-6.md @@ -1,25 +1,14 @@ --- title: Assignment 6 -due: 2017-09-25 10:50:00 -04:00 +due: 2018-02-13 09:00:00 -04:00 --- -* Read *Think Python* [Chapter 5.8-5.14](http://www.greenteapress.com/thinkpython2/html/thinkpython2006.html) -* Study the diagnostic code below: -You should understand why the following script prints what it does by Monday. -Study it with Python Tutor, a classmate, or a NINJA. +## Read +* Think Python [Chapter 5.8-5.13](http://www.greenteapress.com/thinkpython2/html/thinkpython2006.html) +* Think Python [Chapter 6.5-6.10](http://www.greenteapress.com/thinkpython2/html/thinkpython2007.html) +* [Three Questions About Each Bug You Find](http://www.multicians.org/thvv/threeq.html) -```python -def fn1(a): - print("inside fn1, a =", a) +## Do +* Complete Reading Journal 6. -def fn2(a): - print("inside fn2, a =", a) - fn1("from fn2") - -a = "global" -print("at the top level, before the function calls, a =", a) -fn1("from top-level call to fn1") -fn2("from top-level call to fn2") -print("at the top level, after the function calls, a =", a) -``` diff --git a/_assignments/assignment-7.md b/_assignments/assignment-7.md index 8ff38495..59dcec77 100644 --- a/_assignments/assignment-7.md +++ b/_assignments/assignment-7.md @@ -1,13 +1,15 @@ --- title: Assignment 7 -due: 2017-09-28 09:00:00 -04:00 +due: 2018-02-16 09:00:00 -04:00 --- -* Review *Think Python*, [Chapter 5.8-5.14](http://www.greenteapress.com/thinkpython2/html/thinkpython2006.html) -* Read *Think Python*, [Chapter 6.5-6.11](http://www.greenteapress.com/thinkpython2/html/thinkpython2007.html). -* Reading: - * [Three Questions About Each Bug You Find](http://www.multicians.org/thvv/threeq.html), Tom Van Vleck. Estimated reading time: 6 minutes. - * [5 Whys](https://en.wikipedia.org/wiki/5_Whys), _Wikipedia_. Read the overview and Example section. Estimated reading time: 2.5 minutes. - * [An Introduction to 5-why](http://www.bulsuk.com/2009/03/5-why-finding-root-causes.html), Karn G. Bulsuk. Estimated reading time: 5 minutes. - * [Iteration and Design](/notes/iteration-and-design.html) notes. -* Complete *Reading Journal 6* [sic]. +## Read + * Think Python [Chapter 11.1-11.5](http://www.greenteapress.com/thinkpython/html/thinkpython012.html) + * Think Python [Chapter 12.1-12.7](http://www.greenteapress.com/thinkpython2/html/thinkpython2013.html) + * [5 Whys](https://en.wikipedia.org/wiki/5_Whys), Introduction and Examples + * [An Introduction to 5-why](http://www.bulsuk.com/2009/03/5-why-finding-root-causes.html) + +## Do + * Complete Reading Journal 7. + * (Optional) [Submit your computational art](mini-project-2-computational-art.html#optional-in-class-gallery-show) for the gallery show by Friday morning + diff --git a/_assignments/assignment-8.md b/_assignments/assignment-8.md index 1552f01a..114d0184 100644 --- a/_assignments/assignment-8.md +++ b/_assignments/assignment-8.md @@ -1,7 +1,14 @@ --- title: Assignment 8 -due: 2017-10-02 09:00:00 -04:00 +due: 2018-02-23 09:00:00 -04:00 --- -* Read *Think Python*, [Chapters 11.1-4](http://www.greenteapress.com/thinkpython/html/thinkpython012.html), [12.1-5](http://www.greenteapress.com/thinkpython2/html/thinkpython2013.html) -* Complete *Reading Journal 7* [sic]. +## Read + * Think Python Chapters [13](http://www.greenteapress.com/thinkpython/html/thinkpython014.html), [15](http://www.greenteapress.com/thinkpython/html/thinkpython016.html), [16](http://www.greenteapress.com/thinkpython/html/thinkpython017.html), [17](http://www.greenteapress.com/thinkpython/html/thinkpython018.html) + +This week’s reading is longer than usual as we dive into Classes. Be sure to budget time for active reading and use NINJA hours throughout the week. + +## Do + * Complete Reading Journal 8. + * Complete first project toolbox exercise and submit check-in survey + diff --git a/_assignments/assignment-9.md b/_assignments/assignment-9.md index 3d746b91..f9f5bab4 100644 --- a/_assignments/assignment-9.md +++ b/_assignments/assignment-9.md @@ -1,8 +1,12 @@ --- title: Assignment 9 -due: 2017-10-05 09:00:00 -04:00 +due: 2018-02-27 09:00:00 -04:00 --- -* Review *Think Python*, [Chapters 11.1-4](http://www.greenteapress.com/thinkpython/html/thinkpython012.html), [12.1-5](http://www.greenteapress.com/thinkpython2/html/thinkpython2013.html) -* Read _Think Python_, [Chapter 13](http://www.greenteapress.com/thinkpython2/html/thinkpython2014.html), [15](http://www.greenteapress.com/thinkpython2/html/thinkpython2016.html) -* Complete *Reading Journal 8*. +## Read + * Review Think Python Chapters [15](http://www.greenteapress.com/thinkpython/html/thinkpython016.html), [16](http://www.greenteapress.com/thinkpython/html/thinkpython017.html), [17](http://www.greenteapress.com/thinkpython/html/thinkpython018.html) + + +## Do + * Complete Reading Journal 9. + diff --git a/_assignments/final-project.md b/_assignments/final-project.md index 495612a3..6818019b 100644 --- a/_assignments/final-project.md +++ b/_assignments/final-project.md @@ -1,44 +1,48 @@ --- title: Final Project -date: 2017-05-04 9:16:00 -04:00 +date: 2018-03-16 0:00:00 -04:00 description: | From now until the end of the semester you will be working with a team of students on a group software project. The project will culminate during the Final - Event period for this class, with EXPO style demo / poster session. -announce: 2017-10-26 10:30:00 -04:00 -due: 2017-12-13 09:30:00 -05:00 -proposal_survey_url: https://goo.gl/forms/DhHgS73QmsIOejOC3 -spreadsheet_url: https://docs.google.com/spreadsheets/d/1HtPkvLfhCo9cfIQAKojzhBqLgJMWCkaqQx73rdoPrTU/edit?usp=sharing + Event period for this class, with an EXPO style demo / poster session. +announce: 2018-03-16 13:30:00 -04:00 +due: 2018-05-08 12:00:00 -05:00 +proposal_survey_url: https://about:blank +spreadsheet_url: https://about:blank parts: +- name: Team Registration Survey + due: 2018-03-29 13:30:00 -04:00 + tag: team-registration-survey - name: Project Proposal - due: 2017-11-02 10:50:00 -04:00 + due: 2018-03-29 13:30:00 -04:00 tag: project-proposal - name: AR Preparation Document - due: 2017-11-06 09:00:00 -05:00 + due: 2018-04-03 13:30:00 -04:00 tag: architectural-review - name: AR Reflection Document - due: 2017-11-09 09:00:00 -05:00 + due: 2018-04-10 13:30:00 -04:00 tag: architectural-review - name: Project Presentation - due: 2017-11-16 10:50:00 -05:00 + due: 2018-05-08 12:00:00 -04:00 tag: project-presentation -- name: Project Website - due: 2017-12-04 17:00:00 -05:00 - tag: project-website +- name: Project Website MVP + due: 2018-04-24 23:59:00 -04:00 + tag: project-website-mvp - name: Project Website, feedback addressed - due: 2017-12-07 17:00:00 -05:00 - tag: project-website + due: 2018-05-01 13:30:00 -04:00 + tag: project-website-final - name: Final Deliverables - due: 2017-12-13 09:30:00 -05:00 + due: 2018-05-08 12:00:00 -04:00 tag: demo-session-poster type: index -proposal_part: 0 -arch_review_part: 1 -presentation_part: 3 -website_part: 4 -website_revision: 5 -expo_part: 6 -final_deliverables_part: 6 +team_registration_survey_part: 0 +proposal_part: 1 +arch_review_part: 2 +presentation_part: 4 +website_part: 5 +website_revision: 6 +expo_part: 7 +final_deliverables_part: 7 --- {% include toc %} @@ -47,20 +51,20 @@ final_deliverables_part: 6 From now until the end of the semester you will be working with a team of students on a group software project. The project will culminate during the -Final Event period for this class, with EXPO style demo / poster session. +Final Event period for this class, with an EXPO style demo / video / poster session. ## Project Topic ### Requirements -* As this class is called "Software Design", your project should have a substantial software design component (interfacing with mechanical or electrical systems is great, but the software should be the major component). +* As this class is called "Software Design", your project should have a substantial software design component (interfacing with mechanical or electrical systems is considered on a case by case basis, but the software should be the major component). * Most of the your final project should be written in Python. It is okay if some amount is written in another language, but the bulk of the project should be implemented in Python. Part of the reason for this requirement is to facilitate peer design reviews. ### Suggestions for Project Topics -* Since the theme of this course is "computation as applied to interesting problems in science, engineering, and beyond" you may want to use this project as an opportunity to explore how computation can be applied to a discipline / problem you care deeply about. Choosing an interdisciplinary project may also allow your software design project to overlap with work you are doing in other courses (we are fine with this, but we would have to check with the other instructors to make sure this is okay). If you choose to be interdisciplinary, perhaps we can recruit an appropriate faculty angel adviser for your project. -* If you want to have some experience doing a project "for" a client, talk to faculty and staff on campus. Talk to parents and relatives with real jobs. Perhaps, they have a need that you can help with. -* Make a positive difference in the world. See broken things and fix them. +* Because the theme of this course is "computation as applied to interesting problems in science, engineering, and beyond" you may want to use this project as an opportunity to explore how computation can be applied to a discipline / problem you care deeply about. Choosing an interdisciplinary project may also allow your software design project to overlap with work you are doing in other courses (we are fine with this, but we would have to check with the other instructors to make sure this is okay). If you choose to be interdisciplinary, perhaps we can recruit an appropriate faculty angel adviser for your project. +* If you want to have some experience doing a project "for" a client, talk to faculty and staff on campus. Talk to parents and relatives with real jobs. Perhaps, they have a need that your team can help with. +* Make a positive difference in the world. See broken things and try to fix them. * A good project is one that meets your learning goals. For instance, if it is really important to you to learn how to create a program with a GUI, you should make sure that your project topic aligns with this learning goal. * A good project is one that has a realistic and well-defined minimum deliverable as well as many opportunities for going beyond the minimum deliverable (depending on the pace and enthusiasm of the team). @@ -68,23 +72,32 @@ Final Event period for this class, with EXPO style demo / poster session. ### Requirements -* You are required to work on a team of 4-5 students. A limited number of 3-student teams may be permitted, upon instructor approval. +* You are required to work on a team of 2-4 students. Instructors will help facilitate teaming (and approve final teams) ### Team Formation Advice -* Try to **work with people because you share a common interest** rather than simply working with your friends (we will do a structured activity to help with this aspect of team formation). -* **Work with people that want to devote similar amounts of time to the project.** For instance, if you want to devote your life to making the best most awesomest SoftDes project EVAR, you should probably work with other people that share your ambition! +* Try to **work with people because you share a common interest** rather than simply working with your friends (we will offer guidance during the final project kick-off). +* **Work with people that want to devote similar amounts of time to the project.** For instance, if you want to devote your life to making the best most awesomest SoftDes project ever, you should probably work with other people who share that desire! * **Work with people that envision a similar style of work on the project.** For instance, if you really want to pair-program the entire project, but your teammates prefer to divvy up the work and work independently, that is probably not a good situation. +Refer back to the answers you provided during the reflection and teaming surveys and share your thoughts with potential teammates. + ## Project Activities / Deliverables +### Team Registration Survey +_Due {{ page.parts[page.team_registration_survey_part].due | date: site.part_due_date_format }}_ + +Once you know who is on your team, you should create a GitHub repository for your final project. Note: that there is no GitHub classroom assignment to accept and there is no base repository to fork (instead you will be [creating your repository from scratch](https://help.github.com/articles/create-a-repo/)). Whoever creates the repository should add the other team members as collaborators. You will be using this repository to turn in all of the project deliverables listed below. + +Once your team's GitHub repository is set, you are ready to fill out the [team registration survey](https://docs.google.com/forms/d/e/1FAIpQLSdlqZgPCi8dIfyREs8MTb4cWpo3o3hmpFoGvhEmmxJhkwL27w/viewform). We will need you to fill out this survey in order to know where to look for your other project deliverables, so please complete it as soon as you can. + ### Project Proposal _Due {{ page.parts[page.proposal_part].due | date: site.part_due_date_format }}_ **The project proposal is worth 10% of the project grade ([rubric]({% link _assignments/final-project/project-proposal-rubric.md %})).** -Create a document that answers the following questions. More detailed answers give us an ability to give you better feedback to start the project (or revise your proposal). +Create a document on your team's final project repo that answers the following questions. More detailed answers give us an ability to give you better feedback to start the project (or revise your proposal). 1. **The Big Idea:** What is the main idea of your project? What topics will you explore and what will you generate? What is your **minimum viable product**? What is a **stretch goal**? 2. **Learning Goals:** What are your individual learning goals for this project? @@ -94,34 +107,28 @@ Create a document that answers the following questions. More detailed answers gi 6. **Risks:** What do you view as the biggest risks to the success of this project? 7. **Additional Course Content:** What are some topics that we might cover in class that you think would be especially helpful for your project? -The teaching team will either approve you to post your proposal to your project's GitHub repo and begin working or ask you to make revisions to your document. +The teaching team will either approve your page, or provide suggestions and request revisions. ### Architectural Review _Date: {{ page.parts[page.arch_review_part].due | date: '%A, %B %-d' }}_ -**The Architectural review is worth 15% of the project grade ([rubric]({% link _assignments/final-project/architectural-review.md %})).** +**The Architectural review(s) is worth 15% of the project grade ([rubric]({% link _assignments/final-project/architectural-review.md %})).** -We will be holding an architectural review -{% if false %} which will entail groups of three or four teams taking turns presenting {% else %} for teams to present {% endif %} their plans for -their project. -This review is intended to very interactive, and will focus on soliciting useful/actionable feedback rather than being a one-way brain dump. +Each team will complete one (or more) architectural reviews, which will entail teams presenting plans for their project to other teams, NINJAs, and instructors. +This review is intended to be interactive, and will focus on soliciting useful/actionable feedback rather than being a one-way brain dump. In addition to the in-person component of this activity, there will be a framing/agenda setting document due before the review and a reflection/synthesis document due after. See the [Architectural Review]({% link _assignments/final-project/architectural-review.md %}) page for full details about the assignment. -### Project Presentation +### Project Presentation (removed) -{% assign part = page.parts[page.presentation_part] %} -_Date: {{ part.due | date: '%A, %B %-d' }}_ -**The Project Presentation is worth 10% of the project grade** **(see [project presentation rubric]({% link _assignments/final-project/project-presentation-rubric.md %}))** +**The Project Presentation has been removed as a part of the Spring 2018 Final Project** **(see [project presentation rubric and guidelines]({% link _assignments/final-project/project-presentation-rubric.md %}))** -On {{ page.parts[page.presentation_part].due | date: '%A, %B %-d' }} your team will present the progress with the project to the class. -This is intended to be a formal / polished presentation. The focus of this activity will be around successful and professional communication. -There will be limited time for feedback in class, but you can communicate your feedback using the online form. +The addition of the visual / video representation of the project replaced the requirement for a project presentation this semester. ### Project Website @@ -130,7 +137,7 @@ _Due: {{ part.due | date: '%-I:%M %p %A, %B %-d' }}._ _Final revision, that incorporates instructor feedback, due {{ page.parts[page.website_revision].due | date: '%-I:%M %p %A, %B %-d' }}._ -**The final website is worth 15% of the project grade** +**The final website is worth 25% of the project grade** Your project website is the lasting record of what you have accomplished over the course of this project, and hopefully a valuable contribution to your @@ -184,7 +191,7 @@ like. You can continue to use [GitHub pages](https://pages.github.com/), possibly along with [Jekyll](http://jekyllrb.com/docs/github-pages/), or you can switch to an easier option like [Google Sites](https://sites.google.com/). If you'd like to make a GitHub site with multiple pages using Markdown, -Patrick and Franton have written a [helpful +former SoftDes NINJAs Patrick and Franton have written a [helpful guide](http://phuston.github.io/patrickandfrantonarethebestninjas/howto). Whatever implementation option you choose, you **must** include a link to your @@ -194,12 +201,12 @@ will still be around in the future! **Submission mechanics**: Your project's GitHub repo page should link to your web site. This means either the README, or the Website that is optionally displayed in the upper right corner of your GitHub repo page, should contain this link. -### Demo Session Poster +### Demo Session Poster and Video {% assign part = page.parts[page.expo_part] %} _Printed before {{ part.due | date: '%-H:%M %p' }} on {{ part.due | date: '%A, %B %-d' }}_ -**The poster is worth 10% of the project grade.** +**The poster and video are worth 10% of the project grade.** Each team will create a poster to accompany the final demonstration session. Your poster will contain similar information to your website, but reformatted @@ -222,7 +229,14 @@ Examples and guides: * * -**Submission mechanics**: (1) Your project README or project web site must link to your poster file. (2) Your poster must also be printed in time for the {{ part.due | date: '%b %-d' }} final event. +**demo video** + +Your website will have a video of your team demoing your project and giving a 1-minute or less pitch about it. Include the project's goal, what the software does, how to use it, why your team made it, and what you would do if you had more time. + +The teaching team will offer suggestions and give feedback on draft videos related to production quality and content. + + +**Submission mechanics**: (1) Your project README or project web site must link to your poster file and video. (2) Your poster must also be printed in time for the {{ part.due | date: '%b %-d' }} final event. ### Code submission @@ -256,11 +270,26 @@ about this, just ask. ### Final Demo / Presentation Session {% assign part = page.parts[page.expo_part] %} -_Date: {% if part.due %}{{ part.due | date: '%A, %b %-d, %-H:%M %p' }}–{{ part.due | date: '%-H:%M %p' }}{% else %}TBD{% endif %}_ +_Date: {% if part.due %}{{ part.due | date: '%A, %b %-d, %-H:%M %p' }}{% else %}TBD{% endif %}_ -During the Final Event, {% if site.sections > 1 %} both sections of {% endif %} -SoftDes will meet in {{ site.room_number }} +During the Final Event, {% if site.sections > 1 %} all studios of {% endif %} +SoftDes will meet in {{ site.final_room_number }} for an EXPO style poster/demo session of your final projects. This session is for everyone to share what they've created, and will not be evaluated. We will be inviting other members of the Olin community to check out your fantastic work. + + +* 12:00 + * all students arrive in AC326 and AC328. + * we will watch a playlist of <2 minute videos created by each SoftDes team while we set up demo stations. + * each team will be given a place on a whiteboard to hang the project poster and a table to set up a demo. + * the teaching team will thank the students and have closing remarks. + * we jam into one studio and take a class photo. +* 12:30 + * guests arrive. + * at least one team member will remain at demo stations while other team members enjoy the open house. + * light snacks are available. +* 2:30 + * teams begin to clean up when guests leave. + * time is available to complete course evaluations. diff --git a/_assignments/final-project/architectural-review.md b/_assignments/final-project/architectural-review.md index 572b5930..d25dbbbf 100644 --- a/_assignments/final-project/architectural-review.md +++ b/_assignments/final-project/architectural-review.md @@ -8,7 +8,7 @@ parent: final-project ## Overview During the course of the final project, your team will complete an Architectural -Peer Review. This review will focus on high-level design decisions, and will give your team +Peer Review. This review will focus on high-level design decisions, and will give your team an opportunity to present ideas of how the architecture of the code will be. **What it is** @@ -22,9 +22,9 @@ opportunity to present ideas of how the architecture of the code will be. * Highly polished final presentation of your work (that comes later) * One-way presentation -For more tips and guidelines, check out the [information on SCOPE Technical +For more tips and guidelines, check out one version of the [information on SCOPE Technical Reviews]({% link files/final-project/Technical_Review_Deliverable_and_Rubric.pdf %}) -given to students at the beginning of the year. +given to SCOPE students in recent years. ## Before the Architectural Review @@ -38,14 +38,12 @@ and make sure you structure your review to elicit the information that you are looking for. Your technical review should **always** start with a discussion of what you hope to get out of it. -There are many potential structures you can use for a review, and you should -feel free to choose whichever structure makes the most sense for your team and -where you are in the project. Some examples: +There are many potential structures you can use for a review, and the structure you choose should be appropriate to where we are in our project cycle. Below is a list of examples, some of which are appropriate for an early stage architectural review and some of which are more appropriate for late stage architectural reviews: -* **Collaborative ideation**: get some post-its and Sharpies and do an ideation activity with the other teams (note: if you need supplies for your technical review, it is your responsibility to let us know in advance so that we can help you get what you need.) -* **Technical discussion**: bring some particularly difficult technical problem to the technical review (_e.g._ choosing the right algorithm to solve some problem). Discuss potential solutions and pros and cons. Ask the other teams which solution sounds best and if there are other potential solutions that you should consider. -* **Prototype feedback**: have the other teams use a prototype of your software (make sure to bring a few laptops with the software ready to go) and give you feedback on your interface and features. -* **Software architecture discussion**: discuss some aspect of your software architecture (_e.g._ how you are structuring the various classes that make up your program). Present a particularly difficult aspect of your software architecture, and ask the other teams if they have any advice/feedback. +* **Risk identification and mitigation** (appropriate for early stage): early in the project we did an activity where you had to identify the biggest outstanding questions / risks / unknowns that you had regarding your final project. Doing this early in your project cycle is invaluable for helping you to appropriately scope your project, determine your system architecture, and assign tasks to individual team members. A very efficient use of an early stage architectural review is to pose these questions / risks to your audience to make sure that you have both identified the right ones and to make sure that you collect as many good ideas for how to address these questions as possible. As stated in class, for the first AR, we want everyone to structure their review towards getting input in this area. +* **Software architecture discussion** (appropriate for early stage): discuss some aspect of your software architecture (_e.g._ how you are structuring the various classes that make up your program). Present a particularly difficult aspect of your software architecture, and ask the other teams if they have any advice/feedback. +* **Technical discussion** (appropriate for later stage): bring some particularly difficult technical problem to the technical review (_e.g._ choosing the right algorithm to solve some problem). Discuss potential solutions and pros and cons. Ask the other teams which solution sounds best and if there are other potential solutions that you should consider. +* **Prototype feedback** (appropriate for later stage): have the other teams use a prototype of your software (make sure to bring a few laptops with the software ready to go) and give you feedback on your interface and features. * Combination of the above, or something else entirely Your Preparation and Framing document should have (at least) the following @@ -54,25 +52,20 @@ sections: 1. **Background and context** What information about your project does the audience need to participate fully in the technical review? You should share enough to make sure your audience understands the questions you are asking, but without going into unnecessary detail. 2. **Key questions** What do you want to learn from the review? What are the most important decisions your team is currently contemplating? Where might an outside perspective be most helpful? As you select key questions to ask during the review, bear in mind both the time limitations and background of your audience. 3. **Agenda for technical review session** Be specific about how you plan to use your allotted time. What strategies will you use to communicate with your audience? +4. **Feedback form** Create a Google form that folks in the review will use to provide you with feedback or answers to various questions you pose to your audience. Since, at least for the first review, the time you have to present will be very short you should expect most of the feedback you get to come from this form rather than thoughts expressed orally during your session. Please [submit a link to your Google form](https://docs.google.com/forms/d/e/1FAIpQLSdDb4Q3wtGMyax6DCJGRD3zbzuo9uQNjGTNSEKS-97H9nIy_Q/viewform) using this other Google form! (you must have this submitted no less than 2 hours before class so we have time to post a link on the course website). It is often useful to provide some background material to your audience before -the review so they're not coming into the discussion "cold". You may assign -the peer teams in your group a reasonable amount of "homework" (~10-20 minutes +the review so they're not coming into the discussion "cold". You may (optionally) assign +the peer teams in your group a reasonable amount of "homework" (~5-10 minutes of reading) by emailing them at least 24 hours before your technical review. The Preparation and Framing document must be posted as [Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) to your team GitHub repository before the review takes -place. You should also post any additional materials (e.g. slides, handouts) -that you use during the technical review. +place. You should also post any additional materials (e.g. slides, handouts, Google form) that you use during the technical review. ## Day of the Architectural Review -Teams are organized into groups of three or four (see groupings below). These -groups will stay together for both technical reviews, and the other teams in -your group may be a valuable resource for sharing information as you work on -the project. - -The day of the review will be divided into 25-minute blocks, with teams taking +Teams are organized into groups and announced at the start of class. The day of the review will be divided into time blocks, within which teams take turns as presenting team and audience. Both roles are equally important and you are expected to contribute fully to each. diff --git a/_assignments/final-project/project-presentation-rubric.md b/_assignments/final-project/project-presentation-rubric.md index 67c1a4b3..b1246695 100644 --- a/_assignments/final-project/project-presentation-rubric.md +++ b/_assignments/final-project/project-presentation-rubric.md @@ -1,32 +1,26 @@ --- title: Project Presentation Rubric parent: final-project -survey_url: https://goo.gl/forms/DVvmWqpIUdCUV86F2 +survey_url: https://about:blank +presentation_folder: https://drive.google.com/drive/folders/1KEipFo5f_aNXpjbbkZE6Wkj3WPCaen28?usp=sharing --- ## Presentation Guidelines -Project presentations are very different than the technical reviews. Technical +Project presentations are very different than the architectural reviews. Architectural reviews are about communicating specific design or code issues so that the audience would have enough information to help you with these decisions. -Project presentations will largely be a one-way street. You will be crafting +The project presentations are a one-way street. You will be crafting your presentation to tell the audience about the current state of your project in a smooth, engaging, and professional manner. Here are some bullet points to keep in mind: -{% if site.large_class %} -* You will have ~7 minutes to present and ~1.5 minutes to answer a quick question or two per presentation. -{% else %} -* You will have 7-10 minutes to present, followed by questions. -{% endif %} -{% if site.large_class %} -* Everyone will be presenting from one laptop (one set up in AC326, and one set up in AC328) the same laptop. You should upload your slides to the [shared Google Drive folder]({{ site.data.course.urls.final_project_shared_folder }}) beforehand. Acceptable formats are PowerPoint, PDF, and Google presentation. +* You will have ~5 minutes to present (there will be no time for questions). +* Everyone will be presenting from one laptop. You should upload your slides to the [shared Google Drive folder]({{ page.presentation_folder }}) beforehand. Acceptable formats are PowerPoint, PDF, and Google presentation. * As a consequence of the previous point, no live demos! As an alternative, we suggest using a screen capture program (such as [this](http://www.maartenbaert.be/simplescreenrecorder/) one) to highlight what your software can do so far. You should then upload your screen capture to YouTube so that it can be shown during your presentation. -{% endif %} -* Not everyone knows {% unless site.large_class %} everything {% endunless %} about your project! Your presentation should provide motivation and context for your project. -* If you are using algorithms, libraries, or technologies that were not explicitly taught as part of the class, make sure to properly explain them. Given the duration of the presentation, you might have to gloss over some details (this is okay!). Be strategic about how deeply you explain various aspects of your system. -* A brief overview of your code architecture is always welcome. Just don't get too bogged down into unimportant details. -* Include some information about what you plan to do by the Software Design Expo. +* Not everyone knows everything about your project! Your presentation should provide motivation and context for your project. +* If you are using algorithms, libraries, or technologies that were not explicitly taught as part of the class, make sure to properly explain them. Given the duration of the presentation, you will have to gloss over many of the details (this is okay!). Be strategic about how you explain various aspects of your system. +* A brief overview of your code architecture is potentially useful, but keep in mind that you will be able to provide more details on what you did when people come to visit your poster / demo station later in the final event period. * Be professional. * Be energetic and excited. This is your time to get the class excited about your project. @@ -39,13 +33,14 @@ a Google form (link to be posted). {%- endif %} So, make sure to have your laptop charged and ready to go. -{% if site.large_class %} ## Schedule -[Found here]({{ site.data.course.urls.final_project_schedule }}) +Project presentations will take place during the first half of the final event period (12:00pm on May 8th). -{% endif %} +## Presentation Rehearsal + +Before the final event you are required to do a rehearsal of your presentation. The NINJAs will be posting times when they are available to listen to your presentation and provide you with feedback. ## Rubric @@ -67,7 +62,7 @@ Communicate the status of your project including: * what you have done so far (possibly including screenshots or a video demo) * current work -* future work /reach goals +* future work /reach goals (if you were to do this after the semester) **Professionalism** (25%) diff --git a/_assignments/mini-project-1-gene-finder.md b/_assignments/mini-project-1-gene-finder.md index 6b87594e..dda38481 100644 --- a/_assignments/mini-project-1-gene-finder.md +++ b/_assignments/mini-project-1-gene-finder.md @@ -5,14 +5,14 @@ description: > a DNA sequence and outputs snippets of DNA that are likely to be protein-coding genes. You will then use your program to find genes in a sequence of DNA from the bacterium Salmonella Enterica. -due: 2017-09-25 10:50:00 -04:00 +due: 2018-02-09 13:30:00 -04:00 parts: - name: Week 1 tag: week-1 - due: 2017-09-18 10:50:00 -04:00 + due: 2018-02-02 13:30:00 -04:00 - name: Week 2 tag: week-2 - due: 2017-09-25 10:50:00 -04:00 + due: 2018-02-09 13:30:00 -04:00 --- {% include toc %} @@ -122,7 +122,7 @@ The podcast discusses a number of topics, but the first segment of the podcast is about Typhoid Mary (although, you really should listen to the whole thing; you will not be disappointed). -![]({% link images/assignments/gene-finder/mary-nyamerican.jpg %}) +![]({{ site.baseurl }}{% link images/assignments/gene-finder/mary-nyamerican.jpg %}) Image source: @@ -133,35 +133,23 @@ you will be using, check out this MIT OpenCourseWare video. ## Getting Set -The first step to getting started on this assignment is to fork the -[{{site.github.owner_name}}/GeneFinder](https://github.com//{{site.github.owner_name}}/GeneFinder) repository. -The steps to do this are the same as the ones you went through to create your +The first step to getting started on this assignment is get a copy of the starter files on your computer. +The process is the same as the one you went through to create your reading journal. For your reference, here are the steps again: -1. Open up a new browser window, and navigate to -2. If you are not already logged in, login to your GitHub account by clicking the "sign in" button at the top left of the page -3. Copy and paste the following URL into the URL bar of the window that you used to login to GitHub [https://github.com//{{site.github.owner_name}}/GeneFinder](https://github.com//{{site.github.owner_name}}/GeneFinder) -4. Fork the `GeneFinder` repository by clicking on the "Fork" button in the upper right of the window. If prompted for where you should fork the repository, select `@yourgithubusername`. -5. You should now be at the page that shows your fork of the SoftDes repository. Copy the URL in the box labeled "HTTPS Clone URL". -6. Open up a terminal and execute the following commands (note: these commands will clone your `GeneFinder` repository in your home directory, please modify the first line to cd to a different directory if you'd rather clone somewhere else). - -Linux and macOS: +1. Click on the invitation link at <{{ site.data.github.genefinder_invite }}> +2. Click the green button “Accept this assignment”. +3. Follow the remaining instructions until you get to your repository page. It will looks something like , except with your GitHub user id instead of `myname`. +4. Clone the repository to your computer by typing the following into your terminal program. Replace `myname` with your GitHub user id. +(note: these commands will clone your GeneFinder repository in your home directory, please modify the first line to cd to a different directory if you’d rather clone somewhere else). ```bash $ cd ~ -$ git clone https://github.com/yourgithubusernamehere/GeneFinder.git # the https URL will be the URL copied in step 5) +$ git clone https://github.com/{{ site.data.github.organization }}/GeneFinder-myname.git GeneFinder $ cd GeneFinder $ ls * ``` -Windows: - -``` -$ git clone https://github.com/yourgithubusernamehere/GeneFinder.git # the https URL will be the URL copied in step 5) -$ cd GeneFinder -$ dir -``` - The last command will show you all of the files in the `GeneFinder` repository. The next section explains the purpose of each of these files. @@ -194,7 +182,7 @@ start). Now that you have a good sense of the functions you will be filling out, take a look at this function diagram. -![]({% link images/assignments/gene-finder/FunctionDiagram.png %}) +![]({{ site.baseurl }}{% link images/assignments/gene-finder/FunctionDiagram.png %}) This diagram shows all of the functions in the program, and uses a directed arrow to indicate that the function on the "from" side of the arrow calls the @@ -330,13 +318,13 @@ how come? ### Turning in Week 1 Assignment -You will not be turning in your code for this assignment. However, you are required to check in with a NINJA before the class when the week 1 assignment is due. This check in can either be done in person or via a Slack message. If you are very confident with the material, the online version is probably fine (send a link to your pushed code). If you are having difficulty, an in-person check in is certainly the way to go. The check in is not designed to be big and scary; it is primarily an opportunity for you to get help from your NINJA. All that being said, the check ins will not be productive if you haven't done the necessary preparation before the check in. We hope that adding a bit of a formal assessment component to the check in will help ensure that people put in the appropriate time. The check in grading rubric will be as follows: +You be turning in your week 1 assignment by pushing your code to Github (this will use the same process you are using for turning in the reading journals). If you are struggling with the mini-project, we strongly advise you to meet with one of the NINJAs (either for some guidance, or just to look over your program). This week 1 work will be graded using the following rubric: -* The check in never happens, or the assignment has not been started before the check in occurs: 0% -* Only a minimal attempt has been made to complete the check in materials: 50% (note that minimal results does not imply minimal attempt. It is okay that you are struggling as long as you are trying). -* All code is written and works or a sincere effort has been made to complete the check in materials: 100% +* No work has been turned in: 0% +* Only a minimal attempt has been made to complete the first part of the mini-project: 50% +* All code is written and works, or a sincere effort has been made to complete the work: 100% -The check in will be worth 20% of the final grade for this assignment. +The intermediate checkpoint will be worth 20% of the final grade for this assignment. ## Week 2 @@ -355,7 +343,7 @@ A unit test (make sure you have read the [Unit Testing Instructions](#unit-testi 'ATGCTACATTCGCAT' ``` -* `longest_ORF_noncoding`: this function takes as input a DNA sequence and an integer indicating how many random trials should be performed. For each random trial, the DNA sequence should be shuffled and the longest ORF should be computed. The output of the function should be **the length** of the longest ORF that was found across all random trials (that is the output of `longest_ORF_noncoding` is an integer). In order to test this code you may find it useful to use the provided Salmonella DNA sequence (see part 4). For example, if you find a longest ORF of 700, 600, and 300 on your three random trials, this function should output 700. +* `longest_ORF_noncoding`: this function takes as input a DNA sequence and an integer indicating how many random trials should be performed. For each random trial, the DNA sequence should be shuffled and the longest ORF should be computed. The output of the function should be **the length** of the longest ORF that was found across all random trials (that is the output of `longest_ORF_noncoding` is an integer). In order to test this code you may find it useful to use the provided Salmonella DNA sequence. For example, if you find a longest ORF of 700, 600, and 300 on your three random trials, this function should output 700. Note 1: In order to randomly shuffle a string you should use the provided `shuffle_string` function. If you wanted to implement this function yourself, you could take the following approach: @@ -427,21 +415,7 @@ state-of-the art one, you can try out one called Glimmer ### Turning in Week 2 Assignment -Submitting your assignment is a two step process: - -1. Complete the work and push it to your GitHub repository -2. Do at least one of: - * Submit a pull request to the upstream {{ site.github.owner_name }} repository that you originally forked from - * Visit a NINJA in person to check off week 2 of your assignment - -Pull requests are typically used to contribute code to someone else's project -in the open source world. They let you send changes you've made, which the -original author can then choose to pull in and accept. We actually like our -assignment without solutions thank you very much, so we won't be accepting -your pull requests. Instead, we use them as: - -1. Your way to tell us when you're done and we should look at your assignment, and -2. A mechanism for us to provide written feedback on your code +In order to turn in your assignment make sure that your work is pushed to your GitHub repository. For the main assignment, all your code will be in `gene_finder.py`. If you choose to do the **Going Beyond** portion, it is up to you how you structure @@ -558,7 +532,7 @@ For example, generate a picture that shows where the genes are in the DNA strand * [Kivy](https://kivy.org/#home) for interactive user interfaces. * [pygame](http://www.pygame.org/news) for writing games, especially platformer games. We'll be using pygame for the third mini-project. -![](/images/assignments/gene-finder/genes.png) +![]({{ site.baseurl }}/images/assignments/gene-finder/genes.png) You can also explore: * Draw a histogram that compares the lengths of the genes found to the lengths of the noncoding ORFs from the shuffled sequences. diff --git a/_assignments/mini-project-2-computational-art.md b/_assignments/mini-project-2-computational-art.md index 78a07cc4..83e64db9 100644 --- a/_assignments/mini-project-2-computational-art.md +++ b/_assignments/mini-project-2-computational-art.md @@ -3,9 +3,9 @@ title: 'Mini Project 2: Computational Art' description: > In this assignment you will be exploring one particular means of using computers to generate images. -announce: 2017-09-14 10:50:00 -04:00 -due: 2017-10-02 09:00:00 -04:00 -gallery_due: 2017-10-02 10:00:00 -04:00 +announce: 2018-02-08 13:30:00 -05:00 +due: 2018-02-16 13:30:00 -05:00 +gallery_due: 2018-02-16 11:30:00 -05:00 --- {% include toc %} @@ -137,17 +137,12 @@ at Harvey Mudd: ## Part 0: Install and test Python Imaging Library -In order to get started on the assignment, you should fork the [base -repository](https://github.com/{{site.github.owner_name}}/ComputationalArt) for the -computational art mini-project. Once you've forked the repository, clone the -repository on your computer. If you clone the repository in your home -directory, the starter code will be in `ComputationalArt/recursive_art.py`. In -addition to fetching the starter code, you should also install the [Pillow -fork](https://pillow.readthedocs.org/) of the Python Imaging Library -("PIL"). To do so, execute the following command at the Linux terminal or Windows command prompt: +In order to get started on the assignment, you should accept the assignment in Github classroom by clicking on this link [https://classroom.github.com/a/nEURCP6l](https://classroom.github.com/a/nEURCP6l). Once you've accepted the assignment, clone the +repository on your computer. For example, if you clone the repository the folder `ComputationalArt` in your home directory, the starter code will be in `~/ComputationalArt/recursive_art.py`. In addition to fetching the starter code, you should also install the [Pillow fork](https://pillow.readthedocs.org/) of the Python Imaging Library +("PIL"). To do so, execute the following command at the Linux terminal: ```bash -$ pip install Pillow +$ conda install Pillow ``` The starter code includes a function called `test_image` that uses PIL to @@ -155,14 +150,13 @@ generate an image where each pixel has a random color value. When you run the starter code, you should see several unit test failures from functions you will implement later, and it should save an image file named `noise.png` in your run directory. You can view `noise.png` using the built-in tool -`image_viewer`. +Image Viewer (`eog` on the command line). [![Random pixel noise]({% link images/assignments/computational-art/noise.png %}){:width="320px" height="320px"}]({% link images/assignments/computational-art/noise.png %}) While this looks pretty cool (and it might be fun to convince your gullible friends it is a Magic Eye picture), I wouldn't call it _art_. In the rest of -the assignment, you will combine randomness with structure to produce more -compelling images. +the assignment, you will combine randomness with structure to produce more compelling images. Once you've verified that PIL is working correctly, comment out the line that calls `test_image` and un-comment the line that calls `generate_art`. If you @@ -424,11 +418,7 @@ green_channel_pixel_for_x_y = green(x, y) Instead of building random functions of two variables (x, y) build random function of three variables (x, y, t) where t represents the frame number in a -movie rescaled to the interval [-1, +1]. The easiest way to create these movies -is to output a series of image files (one for each frame of the movie) and -then use a command line tool such as **avconv** to encode them into a movie -(note: on older version of Ubuntu, such as 12.04, you should use `ffmpeg` -instead). +movie rescaled to the interval [-1, +1]. The easiest way to create these movies is to output a series of image files (one for each frame of the movie) and then use a command line tool such as **avconv** to encode them into a movie. For instance, if you created images `frame001.png`, `frame002.png`, ..., `frame100.png` you could encode these images into a movie using the following @@ -442,18 +432,6 @@ Use `frame%03d.png` if your files are named _e.g._ `frame001.png`, `frame002.png `frame003.png`. Use `frame%d.png` if your files are named _e.g._ `frame%03d.png`, `frame2.png`, `frame3.png`. -**macOS**: Install **avconv** by installing [home brew](https://brew.sh), -and then running `brew install libav` in the terminal. - -**Windows**: **avconv** doesn't appear to be available for Windows. However, there are several other options: - * GIFs! Take a look at [the Pillow documentation for GIFs](http://pillow.readthedocs.io/en/3.4.x/handbook/image-file-formats.html#gif), and see if you can figure out - how to put together a movie. *Hint: you'll want to look at optional arguments - like `save_all` and `append_images`.* - * Download and install [ImageMagick](https://www.imagemagick.org/script/index.php), and use the `convert` command - (instead of `avconv`) to create a movie from a set of images: - `convert -loop 0 *.png mymovie.mov` - * Install matplotlib, and follow [these instructions]( https://stackoverflow.com/questions/4092927/generating-movie-from-python-without-saving-individual-frames-to-files) - If you want to do something cleaner, you should investigate some libraries for actually creating the movie within Python itself - e.g., `moviepy` (removing the need for saving the frames individually and running **avconv**). You can also use the [Python @@ -538,9 +516,7 @@ choose to do the going beyond portion, it is up to you how you structure your code for that portion). You should also push at least two images generated by your program using the file names `example1.png` and `example2.png` (if you don't want to use PNG, feel free to use a different standard image -format). **The final step in submitting your mini-project is to issue a pull -request from your `ComputationalArt` repo to the `{{site.github.owner_name}}/ComputationalArt` -repo.** +format). ### Optional in-class Gallery Show @@ -568,5 +544,4 @@ A much better and more extensive list of guidance around producing an artist's statement can be found [here](http://www.saic.edu/media/saic/pdfs/lifesaic/careerco-opcenter/workingartistsseries/Handout_WorkingArtist_WritingYourArtistStatement.pdf). -In order to make it into the exhibition you should have your content there no later than -{{ page.gallery_due | date: site.part_due_date_format }} the day that the assignment is due. +In order to make it into the exhibition you should have your content there no later than the morning of the day the assignment is due: {{ page.gallery_due | date: site.part_due_date_format }}. diff --git a/_assignments/mini-project-3-text-mining.md b/_assignments/mini-project-3-text-mining.md index 1ba35697..ebf73b1f 100644 --- a/_assignments/mini-project-3-text-mining.md +++ b/_assignments/mini-project-3-text-mining.md @@ -3,17 +3,10 @@ title: 'Mini Project 3: Text Mining and Analysis' description: > In this assignment you will learn how to use computational techniques to analyze text. -class_slides: https://docs.google.com/presentation/d/1FWuoFpGsim8ZzEpKw18JgoXoE2NGGEgXACIkuUi2dgU/edit?usp=sharing +class_slides: https://docs.google.com/presentation/d/1dRYZskFKM5zbMYOoCEtzrDjY9pzSfe0omhXNN9dbbDE/edit?usp=sharing previous_examples: https://docs.google.com/presentation/d/1fybuwS68fdgCHrhOMcpbDzZOfDhzUJsEiOQ_24pUQHI/edit?usp=sharing -announce: 2017-09-28 10:50:00 -04:00 -due: 2017-10-17 10:50:00 -04:00 -parts: -- name: Teaming - tag: turning-in-your-assignment - due: 2017-10-12 10:50:00 -04:00 -- name: Revision - due: 2017-10-19 22:00:00 -04:00 - tag: revision +announce: 2018-02-15 13:30:00 -05:00 +due: 2018-03-02 13:30:00 -05:00 --- {% include toc %} @@ -22,7 +15,7 @@ parts: In this assignment you will learn how to use computational techniques to analyze text. Specifically, you will access text from the web and social media -(such as Twitter and Facebook), run some sort of computational analysis on it, +(such as Twitter), run some sort of computational analysis on it, and create some sort of deliverable (either some interesting results from a text analysis, a visualization of some kind, or perhaps a computer program that manipulates language in some interesting way). @@ -36,10 +29,7 @@ that manipulates language in some interesting way). ## How to proceed -In order to get started on the assignment, you should fork the [base -repository](https://github.com/{{site.github.owner_name}}/TextMining) for the text mining and -analysis mini-project. Once you've forked the repository, clone the repository -on your computer. +In order to get started on the assignment, you should accept the assignment in Github classroom by clicking [this link](https://classroom.github.com/a/JBenA3gq). Once you've accepted the assignment, clone the repository on your computer. You should read this document in a somewhat non-linear/spiral fashion: @@ -50,7 +40,7 @@ You should read this document in a somewhat non-linear/spiral fashion: ## A Note on Time Management -This project is divided into *three parts*, but they are all do on *the same day*. +This project is divided into *three parts*, but they are all due on *the same day*. You are of course encouraged to start early and work often. Beyond that, we have some advice that may not be intuitive: @@ -66,7 +56,7 @@ guide your implementation work. The goal for Part 1 is for you to get some text from the Internet with the aim of doing something interesting with it down the line. As you approach the -assignment, I recommend that you get a feel for the types of text that you can +assignment, we recommend that you get a feel for the types of text that you can grab, below. However, before spending too much time going down a particular path on the text acquisition component, you should look ahead to Part 2 to understand some of the things you can do with text you are @@ -76,16 +66,11 @@ text with an appropriate technique for language analysis (see Part 2). ### Preliminaries You are not required to use any particular Python package to complete this -assignment. However, I recommend the [Requests](http://docs.python-requests.org/en/master/) +assignment. However, we recommend the [Requests](http://docs.python-requests.org/en/master/) package to retrieve HTML pages from the web, and the [NLTK](http://www.nltk.org) package -to analyze text, and the [Vader sentiment analysis package](https://github.com/cjhutto/vaderSentiment) -for sentiment analysis: +to analyze text, and the Vader sentiment analysis algorithm (included with NLTK). -```bash -$ pip install nltk requests vaderSentiment -``` - -To make sure that Requests is installed correctly, try these commands in +To make sure that Requests is working properly, try these commands in Python: >>> import requests @@ -97,6 +82,10 @@ page. If you'd like to learn more about what is going on behind the scenes, check out the [Web APIs Project Toolbox](https://toolboxes.olin.build/geocoding-and-web-apis/) toolbox. +### A Note About API Keys + +For some of these data sources you will be generating some sort of secret authentication key. The tempting thing to do is to insert this secret right into your code, and then check it into GitHub. The problem with this is that in cases where your repository is public, someone might actually find your API key and use it themselves. While we are not requiring you to follow best practices in this assignment with your API keys (after all your repository is private), if you want to start practicing good habits, we have [a notebook that walks you through ways to handle private keys with version controlled code](/notes/storing-api-keys). + ### Data Source: Project Gutenberg [Project Gutenberg](http://www.gutenberg.org/) is a website that has 42,000 @@ -109,12 +98,12 @@ computational processing to process in Python. In order to download a book from Project Gutenberg you should first use their search engine to find a link to a book that you are interested in analyzing. -For instance, if I decide that I want to analyze _Oliver Twist_ I would click +For instance, if you decide that you want to analyze _Oliver Twist_ you would click on this [link](http://www.gutenberg.org/ebooks/730) from the Gutenberg search -engine. Next, I would copy the link from the portion of the page that says +engine. Next, you would copy the link from the portion of the page that says "Plain Text UTF-8". It turns out that the link to the text of _Oliver Twist_ is `http://www.gutenberg.org/ebooks/730.txt.utf-8`. To download the text -inside Python, I would use the following code: +inside Python, you would use the following code: ```python import requests @@ -138,7 +127,7 @@ if you want to get around the download restriction. ### Data Source: Wikipedia -I recommend the [`wikipedia` package](https://pypi.python.org/pypi/wikipedia/): +We recommend the [`wikipedia` package](https://pypi.python.org/pypi/wikipedia/): $ pip install wikipedia @@ -176,8 +165,8 @@ the documentation follow: Create a Twitter application [here](https://apps.twitter.com/app/new). -Use your GitHub repository URL as the Website. For example, I would use -`https://github.com/osteele/TextMining`. Leave the Callback URL blank. +Use can use your GitHub profile as the website if you wish. It doesn't actually matter all that much what you put here. For example, +`https://github.com/yourusernamehere`. Leave the Callback URL blank. Copy the Consumer Key (API Key) and Consumer Secret (API Secret). You will need these below. @@ -185,7 +174,7 @@ Click on "manage keys and access tokens" to see the Consumer Secret. On that page, click "Generate Access Token", and copy the Access Token and Access Token Secret too. -I recommend the [python-twitter](https://github.com/bear/python-twitter) package. +We recommend the [python-twitter](https://github.com/bear/python-twitter) package. The documentation is [here](https://github.com/bear/python-twitter/wiki). $ pip install python-twitter @@ -244,10 +233,6 @@ Much data on the web is in the form of HTML, which is a mixture of human-languag and HTML markup such as `
` and `

`. You can use the Beautiful Soup package to extract the text from an HTML page. -```bash -$ pip install beautifulsoup4 -``` - ```python from bs4 import BeautifulSoup import requests @@ -265,6 +250,31 @@ re.sub(r'<.+?>', '', str(html.find('p'))) [This is not a robust way to do this. A robust way involves using a recursive function.] +### Additional Possible Data Sources + +In addition to the sources described above, which have been tested, we have some additional suggestions that are more in the exploratory stage. If you have success using these sources, please share it with us! + +#### Google Search + +```bash +$ pip install google +``` +Then to perform a search, you can use the following. + +```python +import googlesearch + +for result in googlesearch.search(query='Computer Science'): + print(result) +``` + +This is a method of accessing Google search results based on the idea of webscraping. In this approach, you are basically downloading the human readable HTML page from Google, and then attempting to extract a structured description of the page. If you want to use Google's API (which will give you structured results directly), you can use Google's [official Python package](https://developers.google.com/api-client-library/python/). Unfortunately, using the official package is much more involved than using the library above. + +#### Additional Corpora + +There's a fantastic list of text corpora available on [this](https://en.wikipedia.org/wiki/List_of_text_corpora) Wikipedia page. Some of the corpora are American English, some are British English, and some are specialized to a particular topic (e.g., US laws). + + ### Pickling Data For several of these data sources you might find that the API calls take a @@ -303,10 +313,7 @@ Toolbox](https://toolboxes.olin.build/pickling/) assignment. ### Characterizing by Word Frequencies -One way to begin to process your text is to take each unit of text (for -instance a book from Project Gutenberg, or perhaps a collection of Facebook -posts by one of your friends) and summarize it by counting the number of times -a particular word appears in the text. A natural way to approach this in +One way to begin to process your text is to take each unit of text (for instance a book from Project Gutenberg, or perhaps some Tweets regarding a topic of interest) and summarize it by counting the number of times a particular word appears in the text. A natural way to approach this in Python would be to use a dictionary where the keys are words that appear and the values are frequencies of words in the text (if you want to do something fancier look into using [TF-IDF features](http://en.wikipedia.org/wiki/Tf%E2%80%93idf)). @@ -320,10 +327,10 @@ in other texts? For some other ideas see [Chapter 13 of Think Python](http://gre #### Doing Linguistic Post-processing -Vader +Vader (note: before doing this you'll need to download the NLTK corpora by running the command `$ python -m nltk.downloader all`) ```python -from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer +from nltk.sentiment.vader import SentimentIntensityAnalyzer analyzer = SentimentIntensityAnalyzer() analyzer.polarity_scores('Software Design is my favorite class!') ``` @@ -340,9 +347,7 @@ You can also do sentiment analysis within NLTK by training a Bayesian classifier ([code](http://www.nltk.org/howto/sentiment.html)). If you perform some linguistic post processing, you may be able to say -something interesting about the text you harvested from the web. For instance, -which of your friends on Facebook is the most negative? Which is the most -subjective? If you listen to a particular Twitter hashtag on a political +something interesting about the text you harvested from the web. For example, if you listen to a particular Twitter hashtag on a political topic, can you gauge the mood of the country by looking at the sentiment of each tweet that comes by in the stream? There are tons of cool options here! @@ -363,7 +368,7 @@ particular element of the vector is the count of how frequently the corresponding word appears in a specific document (if this is a bit vague and you want to try this approach, ask an instructor). -I tried this on some Project Gutenberg texts from two authors: Charles Dickens +We tried this on some Project Gutenberg texts from two authors: Charles Dickens and Charles Darwin. The table below shows the pair-wise similarities between the Charles Dickens texts (note that 1 is perfect similarity): @@ -374,8 +379,7 @@ the Charles Dickens texts (note that 1 is perfect similarity): [0.97905034 0.95030073 0.98230284 1.]] ``` -The pairwise similarities between Dickens and Darwin (I just used one Darwin -text) are: +The pairwise similarities between Dickens and Darwin (we just used one Darwin text) are: ```python [[0.78340575] @@ -407,8 +411,7 @@ If you can generate pairwise similarities (say using the technique above), you can Metric Multi-dimensional Scaling ([MDS](http://en.wikipedia.org/wiki/Multidimensional_scaling)) to visualize the texts in a two dimensional space. This can help identify clusters of -similar texts (for instance, which of your friends on Facebook are most -similar to each other). Here is a particularly inspiring example by Matthew +similar texts. Here is a particularly inspiring example by Matthew Jockers (check out the University of Nebraska's [press release](http://newsroom.unl.edu/releases/2012/08/28/By+text-mining+the+classics,+UNL+professor+unearths+new+literary+insights) on the paper). @@ -416,7 +419,7 @@ paper). ![](http://newsroom.unl.edu/releases/downloadables/photo/20120828macro-american.jpg) In order to apply MDS to your data, you can use the machine learning toolkit -`scikit-learn`. (To install it, consult the [machine learning toolbox)](https://toolboxes.olin.build/machine-learning). +`scikit-learn`. `scikit-learn` should have been installed by default when you installed Anaconda. However, if you get an error trying to import the `sklearn` module, let us know. As a side note we also have a [project toolbox on machine learning](https://toolboxes.olin.build/machine-learning/). Here is some code that uses the similarity matrix defined in the previous section to create a 2-dimensional embedding of the four Charles Dickens and 1 @@ -461,12 +464,17 @@ labeled 4 is the work by Charles Darwin. You can use [Markov](http://en.wikipedia.org/wiki/Markov_chain) analysis to learn a generative model of the text that you collect from the web and use it to generate new texts. You can even use it to create mashups of multiple -texts. Two possibilities in this space would be to imitate Facebook posts by -each of your friends, or to create literary mashups automatically. [Think +texts. One possibility in this space would be to create literary mashups automatically. [Think Python chapter 13](http://greenteapress.com/thinkpython2/html/thinkpython2014.html) section 8 called "Markov Analysis" has some detail on how to do this. Again, let the teaching team know if you go this route and we can provide more guidance. +### Text Classification + +Using machine learning libraries like scikit-learn (which we talked about earlier in this writeup) you can create models that are able to automatically textual objects (e.g., words, paragraphs, sentences) into particular categories. These categories could be anything: positive versus negative product reviews, abusive versus non abusive language, etc. + +We have put together [a notebook](/notes/Frankenstein and Dracula Text Analysis) that uses this approach to determine whether a sentence, taken completely out of context, comes from Mary Shelley's Frankenstein or Bram Stoker's Dracula. By examining the way that the machine learning algorithm solves the task, we can learn a little bit about the underlying narrative structure of each work. + ## Part 3: Project Write-up and Reflection Please prepare a short (suggested lengths given below) document with the @@ -503,12 +511,9 @@ you succeed? ## Turning in your assignment -{% assign part = page.parts[0] %} -_Due: {{ part.due | date: site.part_due_date_format }}_ - * Your code should submitted as either (a) Python file (or files) that can be executed by running *e.g.* `python text_mining.py`, or (b) a Jupyter notebook. * If you submit a Python file: -* The project README must describe how to install any required packages (e.g. `pip install vaderSentiment`) and how to run it (e.g. `python text_mining.py`) +* The project README must describe how to install any required packages and how to run it (e.g. `python text_mining.py`) * If you submit a Jupyter notebook: * You must test that it behaves correctly when you execute "Run All" from the "Cell" menu. * You must *also* submit a Python text file. @@ -525,17 +530,15 @@ Make sure to include a link to the Project Write-up/Reflection in the `README.md 2\. Push your code to GitHub -3\. Create a pull request to the upstream repository - ## Project Presentations -If you’d like to share what you discovered/created as part of your text mining project, please add ~1-2 slides to the [class presentation]({{ page.class_slides }}). +If you’d like to share what you discovered/created as part of your text mining project, you can add it to a [class-wide Google slides presentation]({{ page.class_slides }}). Professionalism is important in public presentations, so please use the “would I be happy for my parents to read this in the newspaper” test when uploading content. Humor is great; abusive language or disparaging groups of people is firmly not acceptable. -Here's some examples from last semester: [SoftDes Spring 2017 spring 2017 MP3 examples]({{ page.previous_examples }}) +Here's some examples from a previous semester: [SoftDes Spring 2017 spring 2017 MP3 examples]({{ page.previous_examples }}) -## Revision + diff --git a/_assignments/mini-project-4-interactive-visualization.md b/_assignments/mini-project-4-interactive-visualization.md index df9841b5..f9097ac8 100644 --- a/_assignments/mini-project-4-interactive-visualization.md +++ b/_assignments/mini-project-4-interactive-visualization.md @@ -4,21 +4,21 @@ description: > The big idea of this project will be to move from static programs (ones that are run, do some computations, and spit out a result) to interactive programs (ones that allow the user to perform actions that change the state of the program). -announce: 2017-10-12 09:00:00 -04:00 -due: 2017-10-30 10:50:00 -04:00 -teaming_spreadsheet: https://docs.google.com/spreadsheets/d/1pykAoJBFgz-e2yGLKbuBznSJ0mt0LGpgUFRxckxxcQg/edit?usp=sharing +announce: 2018-03-01 13:30:00 -05:00 +due: 2018-03-16 13:00:00 -05:00 +mp4-idea-form: https://goo.gl/forms/kf0pxplMfDeGlhHM2 parts: -- name: Teaming +- name: Getting Started tag: getting-started - due: 2017-10-13 20:00:00 -04:00 + due: 2018-03-02 13:30:00 -05:00 - name: Project Proposal - due: 2017-10-16 10:50:00 -04:00 + due: 2018-03-06 13:30:00 -05:00 tag: project-proposal - name: Mid-Project Check-in - due: 2017-10-23 10:30:00 -04:00 + due: 2018-03-09 13:30:00 -05:00 tag: mid-project-check-in - name: Project Write-up and Reflection - due: 2017-10-30 10:50:00 -04:00 + due: 2018-03-16 13:30:00 -05:00 tag: project-write-up-and-reflection --- @@ -45,9 +45,9 @@ write some very powerful software. Here are some ideas: ### Deltas from Previous Projects -1. You will be working with a partner on this project (a single team of 3 will be permitted if a section has an odd number of students). -2. This project is more open-ended than previous projects. In the last mini-project you could choose the data and analysis tool that you wanted to explore. Here, not only do you have these choices, but you can also choose to make a very different thing (e.g. a video game versus an interactive data visualization). -3. You have more time to work on this project (2 weeks, versus 1 week for the last project). +1. You will be working with a partner on this project (assigned to you at MP4 kick-off). +2. This project is more open-ended than previous projects. In the last mini-project, you could choose the data and analysis tool that you wanted to explore. Here, not only do you have these choices, but you can also choose to make a very different thing (e.g. a video game versus an interactive data visualization). +3. You will submit to gihub.com, which can be seen by anyone on the Web, instead of the private github classroom site for this class. We explain the reason for this change during kick-off. ### Computational Skills Emphasized @@ -63,23 +63,22 @@ write some very powerful software. Here are some ideas: Teaming Logistics: -* You must work in a team of exactly two students (if we end up with an odd number of total students, we may have one team of three). -* Only one of you should fork the base repo for this assignment. The one that forks the repo should then add the other team member as a collaborator on GitHub for that repo. +* Only one of you should fork the base repo for this assignment. The one who forks the repo should then add the other team member as a collaborator on GitHub for that repo. Teaming Guidance: -* Do not default to working with your friend. Think hard about what you want out of the project and how you'll work to get it, then explore whether your best buddy as a partner makes the most sense. -* Make sure you and your potential partner are on the same page in terms of project topic. -* You should partner with someone that has roughly the same commitment level to the project. For instance, someone that is excited to clear most of their schedule to complete the most amazing SoftDes project ever should not partner with someone that is just looking to do the minimum. -* You should be mindful of differences in level of programming experience when selecting your partner. Teams that are very closely matched in terms of programming experience should be no problem. Teams that are not closely matched on this axis can also be quite effective. However, if you and your partner are not closely matched, you will want to make sure that you are both vigilant about avoiding some common pitfalls that occur with this type of team. The two most common pitfalls are: the person with more experience gets frustrated with the other team member and does all the work, and the person with more experience writes all the code while the person with less experiences watches them. +* Make sure that you and your potential partner are on the same page in terms of project topic. +* Revisit preferred working styles with your assigned partner. +* Discuss your expected commitment level to this project. +* We attempted to match students according to preferences provided via teaming surveys, but we may end up with partners who have different levels of programming experience. If you and your partner are not closely matched in terms of experience and comfort with programming in Python, you will want to make sure that you are both vigilant about avoiding some common pitfalls that occur with this type of team. The two most common pitfalls are: the person with more experience gets frustrated with the other team member and does all the work, and the person with more experience writes all the code while the person with less experiences watches them. ## Recommended Libraries You are welcome to use whatever library you'd like for this project, however, there is a lot of benefit to sticking to the ones that we recommend. The best -reason for doing so are to ensure that we, the teaching team, can provide you -with as good support as possible as you use the library to complete the -project. If you pick a nonstandard library that none of us have used before, +reason for doing so is to ensure that we, the teaching team, can provide you +with as much support as possible as you use the library to complete the +project. If you pick a non-standard library that none of us have used before, we will have a tough time helping you if you run into problems (although we will certainly try!). @@ -122,7 +121,7 @@ If you want to use an input modality other than keyboard and mouse, you may find the computer vision library OpenCV useful. The idea here would be to capture images from a camera (probably the webcam on your laptop) and use those to control some aspect of your program. To get started check out the -SoftDes [project toolbox exercise on OpenCV](https://toolboxes.olin.build/image-processing). +SoftDes Image processing toolbox. Next, read through the [OpenCV Python tutorials](https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html) and [API reference](http://docs.opencv.org/2.4.9/modules/refman.html)). @@ -134,7 +133,7 @@ and coding the functionality yourself. Here are some pros and cons: * **Pro:** using a library is faster and can let you do things in a short time that would be infeasible if you coded it yourself. * **Pro:** you can mashup different libraries to do amazing things. -* **Con:** if you are shaky on your basic understand of Python you may not learn the basics if you are relying too heavily on others libraries. +* **Con:** if you are shaky on your basic understand of Python, you may not learn the basics if you are relying too heavily on others libraries. * **Con:** if you get too far down the path of using a library and it doesn't do something important that you need, you are in a tough spot. It's up to you how heavily you want to utilize others libraries. All we ask is @@ -154,13 +153,13 @@ sources: 4. A [very comprehensive](https://github.com/caesar0301/awesome-public-datasets) listing of sources for open data. 5. IBM's [Big Data for Social Good Challenge](http://ibmhadoop.challengepost.com/details/data) 6. Make your own dataset using text mining (you should know how to do this from the last project). -7. ??? (the possibilities are endless, e-mail us if you find an awesome trove of data that you think the class should know about post it to Piazza). +7. ??? (the possibilities are endless, e-mail us if you find an awesome trove of data that you think the class should know about post it to Slack). -Once you have the data you'll want to think about how you might using +Once you have the data you'll want to think about how you might use visualization and user input to explore the data. To get your creative juices -flowing here are some cool examples of data visualization: +flowing, here are some cool examples of data visualization: -We will show a bunch of these examples below, but check out [the full +Check out [the full listing](http://www.nytimes.com/newsgraphics/2013/12/30/year-in-interactive-storytelling/#dataviz) from the New York Times Year in Interactive Storytelling. This link is for 2013, but other years are available. @@ -222,15 +221,14 @@ and Pixel. Pogo Joe ([Wikipedia](https://en.wikipedia.org/wiki/Pogo_Joe)). -A Q*Bert “derivative”; written by someone you know. +A Q*Bert “derivative”; written by Oliver Steele, who some of you may know from Olin. #### Interactive Art -There is a big universe out there. The pulsating music visualizer from the -last assignment was one example. Hooking up simple color tracking using OpenCV -to sound synthesis is also a nice one (*e.g.* a musical instrument +There is a big universe out there. Hooking up simple color tracking using OpenCV +to sound synthesis is a nice one (*e.g.* a musical instrument controlled by movements). Check out the [Wikipedia page](http://en.wikipedia.org/wiki/Interactive_art) for more ideas. @@ -246,7 +244,7 @@ scaffolding the use of a very powerful object-oriented design pattern called Here is a diagram (from Wikipedia) that shows the various components of Model- View-Controller and how they interact: -![](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/MVC-Process.svg/1000px-MVC-Process.svg.png) +![](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/MVC-Process.svg/1000px-MVC-Process.svg.png){:width="250px"} To make things concrete, let's think about how we might implement a Pac-Man clone. Here are the classes and the functions that you might use to implement @@ -275,21 +273,12 @@ but we hope it will be helpful at least as a jumping off point. {% assign part = page.parts[0] %} _Due: {{ part.due | date: site.part_due_date_format }}_ -You must find a teammate and decide on a project topic. You are required to -have your teammate selected (and hopefully a rough idea of what you will do +You and your partner must decide upon a project topic. You are required to have a a rough idea of what you will do for the project) by {{ part.due | date: '%-I:%M %P on %a %b %-d' }}. -Use [this Google spreadsheet]({{ page.teaming_spreadsheet }}) to indicate who you are -working with. There is also a section where you can look for a teammate if you -don't have one already. +Use [this Google form to let us know your initial ideas]({{ page.mp4-idea-form }}) to indicate your initial ideas. -Feel free to try out a partner-picking process that we have used in class before (and are likely to again, if needed). Gather people, pens, and post-it notes. Have everyone sit down and write down (on post-its) their name and ideas for project topics (a classic arcade game, something that uses video input, a computer-controlled bad-guy that evolves and gets harder to beat... etc). Take the post-its to a wall. Have people explain their ideas. Cluster together ideas that sound like they're similar or can be combined. -Choose a partner who described something similar to what you want to do *or* someone who excited you by their description. - -As part of filling out this spreadsheet, and starting the project, you should -fork and clone the [base repo](https://github.com/{{ site.github.owner_name }}/InteractiveProgramming) for this project. -Remember, that you will want to have only one of your teammates fork the repo, -and then the other member should be added as a collaborator on GitHub for that -repo. Be sure to add a link to your repo to the shared Google spreadsheet. +One of you needs to fork and clone the [base repo](https://github.com/{{ site.github.owner_name }}/InteractiveProgramming) for this project, then add the other member as a collaborator on GitHub for that +forked repo. There are three deliverables for this project: @@ -298,12 +287,11 @@ There are three deliverables for this project: {% assign part = page.parts[1] %} _Due: {{ part.due | date: site.part_due_date_format }}_ -You can begin working on a project proposal as soon as you select your partner. Part of the {{ part.due | date: site.date_format }} class will be dedicated to approving project proposals. We encourage you to speak with NINJAs before this date during office hours (or an impromptu session arranged via Slack). -By classtime on {{ part.due | date: site.date_format }}, you should be able to provide a link to a proposal document (*e.g.*, a Google doc) that describes the main idea of your project. +By classtime on {{ part.due | date: site.date_format }}, your MP4 repo should have a proposal document (preferably in markdown, but a PDF can suffice) that describes the main idea of your project. Please come to class with a printout of your project proposal. -The instructors will review the proposals. +The instructors will review the proposals during studio time and discuss with each team. Your proposal document should address: @@ -323,6 +311,10 @@ purely to allow us to help shape your project in useful directions - and potenti {% assign part = page.parts[2] %} _Due: {{ part.due | date: site.part_due_date_format }}_ +update 3/8/2018: For this semester's SoftDes, the largest we have offered, we are tweaking the MP4 check-in process from what was originally posted below. We are doing first-pass check-ins via the github repos that student pairs are using to work on and submit MP4. NINJAs will be on-hand during the Friday 3/9 class period to ensure that each partner on each project has pushed something (.py files, design docs, image or sound assets, UML drawings etc) to the appropriate github repo. NINJAs and instructors will be looking at these repos to determine whether an in-person check in will be requested (to be held before the 3/13 class period ends). In cases where the repo is considered to demonstrate sufficient project progress, no in-person check-in will be requested and each partner will receive 100% credit for the check-in. In-person check-ins will be governed by the guidelines below. + +original text of this post: + We are requiring a mid-project check-in for this project. You must meet with a NINJA by end-of-the-day {{ part.due | date: site.part_due_date_format }}. The grading for this check-in will be 0% if you miss it or blow it off, 50% if @@ -424,27 +416,3 @@ If you want to generate truly beautiful documentation, check out [Sphinx](http://sphinx-doc.org/) (the tool used to generate the [Python documentation](https://docs.python.org/3/)). This is certainly not required, but you may want to use it in the future (think: final project) - -{% if false %} -### Revision - -{% assign part = page.parts[4] %} -_Due: {{ part.due | date: site.part_due_date_format }}_ - -Reflection and revision is an important part of the iterative feedback -process. In this part, you will revise and re-submit your project. - -The basis for the revision comes from several places: - -1. Feedback that you received from the NINJAs via Slack and / or GitHub pull requests. -2. You know much more Python now than when we started. -3. There may be extensions or alternate directions you wanted to pursue but didn't have time. - -In addition to correcting any errors in the original submission, you can -use the opportunity to make some technical improvement. -This could take many forms, but examples include: - -* Re-writing the project to use an object-oriented style. -* Finding and improving performance bottlenecks. -* Adding functionality that you didn't get to the first time. -{% endif %} diff --git a/_assignments/mini-project-5-feedback-and-revision.md b/_assignments/mini-project-5-feedback-and-revision.md deleted file mode 100644 index 34cbb6c1..00000000 --- a/_assignments/mini-project-5-feedback-and-revision.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: 'Mini Project 5: Feedback and Revision' -date: 2017-04-11 10:00:00 -04:00 -description: 'Reflection and revision is an important part of the iterative feedback - process. In this mini project, you will select one of your first four mini projects - to revise/extend and resubmit.' -due: 2017-12-10 9:00:00 -05:00 -survey_url: https://goo.gl/forms/NaFs9SKwSgbpDnQ32 ---- - -## Introduction - -Reflection and revision is an important part of the iterative feedback -process. In this mini project, you will select one of your first four mini -projects to revise/extend and resubmit. - -The basis for the revision comes from several places: - -1. For each of the mini projects (and toolboxes) in this class, you received detailed feedback comments from the NINJAs via email and / or GitHub pull requests. -2. You (hopefully) know much more Python now than when we started -3. There may be extensions or alternate directions you wanted to pursue but didn't have time - -In addition to correcting any errors in the original submission, you should -make some technical improvement. This could take many forms, but examples -include: - -* Re-writing an older mini project using an object-oriented style. -* Finding and improving performance bottlenecks. {% comment %}using [algorithm analysis\] -({% link _days/day-17.md %}) and/or [code profiling]({% link _days/day-19.md %}){% endcomment %} -* Pursuing one of the "Going Beyond" options. -* Taking a toolbox to the next level. -* Something else awesome. - -{% if false %} -This exercise should not take as long as the other mini projects, and it is -[worth about half as much]({% link pages/policies.md %}). -{% else %} -This exercise should not take as long as the other mini projects. It is worth a bonus of half as much as the other mini projects. -{% endif %} - -## How to proceed - -### Choose what to work on - -Select which mini project you would like to revise. You may individually -revise MP4. If you and your partner want to work together on MP4, you must -each make a significant contribution. Send us a proposal (see below) if you -choose this option. - -In most cases, doing a "going beyond" on a toolbox you submitted can satisfy this assignment. -If you would like to do a toolbox that you did not do as part of your 5 required toolboxes, -send a note to the teaching team to explain why doing a new toolbox will serve you the best for MP5. - -_[Optional]_ If you'd like some feedback on your proposed technical -improvement or help coming up with one, send a short (1-2 sentences is OK) -proposal to the instructor via Slack. - -### Branch out - -In this mini-project, we'll model a git workflow (one of many possible) in -which there is one stable release branch and all new development happens in -the master branch, just like we've been doing so far. - -Create a new branch called `release` in your repository. You can do this -[directly on GitHub](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/), -or on the [command line](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging). This release -branch will point to your original mini project submission, and you will make -all the new revisions in the `master` branch. - -### Get it done - -Complete your revision and improvement and push your work to GitHub. - -### Turn it in - -Create a pull request from your master branch to your release branch. Submit -your work by [filling out this form]({{ page.survey_url }}) with the -URL of your pull request. diff --git a/_assignments/toolboxes.md b/_assignments/toolboxes.md deleted file mode 100644 index 099c99ca..00000000 --- a/_assignments/toolboxes.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Project Toolboxes -permalink: toolboxes -due: 2017-11-27 09:00:00 -04:00 -parts: -- name: Three Toolboxes - tag: three-toolboxes - due: 2017-11-02 09:00:00 -04:00 -- name: Five Toolboxes - tag: five-toolboxes - due: 2017-11-27 09:00:00 -04:00 ---- - -Software Design and Python are wide worlds, and we'll only explore part of them in class this semester. -The goal of the [Project Toolbox](https://toolboxes.olin.build) exercises is to -gain practice with a variety of interesting topics we won't talk about in -class. -By completing them, you will develop a suite of skills that will allow -you to do great things on the final project and beyond. - -The exercises are modeled after the way many practicing software developers -teach themselves as lifelong learners. In each, you'll: - - 1. Read about a topic - 2. Try an example - 3. Extend it in ways that are interesting to you - -The basic part of each exercise is intended to be relatively quick, taking an -hour or so. (If you find yourself taking significantly longer, be sure to ask -for help.) There are also lots of opportunities to take things further – many -of the topics are active research areas, and you could easily work on some of -them for a lifetime! - -### Tips for success - -* **Don't suffer in silence.** Many of these exercises require installing new packages, which can sometimes come with hiccups. If you're struggling with something, let us know about it on Piazza so we can fix it for you and everyone else. -* **Start early**. The project toolbox can be a great source of inspiration for your final project – but only if you try them in time. -* **Have fun** and follow your own learning goals. - -## Three Toolboxes - -**Due {{ page.parts[0].due | date: site.part_due_date_format }}** - -The first three toolboxes are due {{ page.parts[0].due | date: site.part_due_date_format }}. - -## Five Toolboxes - -**Due {{ page.parts[1].due | date: site.part_due_date_format }}** - -The final two toolboxes (for a total of five) are due {{ page.parts[0].due | date: site.part_due_date_format }}. - -If you get through the Project Toolbox exercises and you have a great idea for -a new one you'd like to create, get in touch with the teaching team! diff --git a/_config.yml b/_config.yml index 3c7db2ec..33d4790b 100644 --- a/_config.yml +++ b/_config.yml @@ -1,11 +1,13 @@ -title: Software Design | Fall 2017 +title: Software Design | Spring 2018 short_title: Software Design description: An introduction to software design. timezone: America/New_York -calendar_url: "https://docs.google.com/spreadsheets/d/e/2PACX-1vRJGhlctkwfwPHcEQ9H_sIML5rezTEDtDIgsTZyq4dlARZmKvGP-NTWJqu9zN1huDfpKMJQvAcYwmCq/pubhtml?gid=0&single=true&widget=true&headers=false" +calendar_url: "https://docs.google.com/spreadsheets/d/e/2PACX-1vStsUF4I-z-UiqDIxUz1vc5ucGPjHkZHKpojMURmEk70KojwJhaaMP8lbu0HCjiVVKC3CBgr53Lpi3N/pubhtml?gid=0&single=true&widget=true&headers=false" +future: true -sections: 1 -room_number: AC128 +sections: 3 +room_number: AC304, AC326, AC328 +final_room_number: AC326, AC328 yandex_key: 0270fddbef1d3809 @@ -27,6 +29,10 @@ collections: layout: default output: true permalink: /notes/:path + toolboxes: + layout: default + output: true + permalink: /toolboxes/:path defaults: - scope: diff --git a/_data/course.yml b/_data/course.yml index 3cdf4ff6..d6d8782f 100644 --- a/_data/course.yml +++ b/_data/course.yml @@ -1 +1 @@ -mp2_gallery_public_drive_path: Public/+Courses/SoftDesFa17 +mp2_gallery_public_drive_path: Public/+Courses/SoftDesSp18 diff --git a/_data/github.yml b/_data/github.yml new file mode 100644 index 00000000..554d7cd7 --- /dev/null +++ b/_data/github.yml @@ -0,0 +1,14 @@ +organization: sd18spring +reading_journal_invite: https://classroom.github.com/a/wVVupiFP +genefinder_invite: https://classroom.github.com/a/i6rW0liB +TB_AI_invite: https://classroom.github.com/a/PQExy2_D +TB_AlgorithmicMusic_invite: https://classroom.github.com/a/lKl5tUz- +TB_ComputerVision_invite: https://classroom.github.com/a/Vf9vxEVv +TB_EvolutionaryAlgorithms_invite: https://classroom.github.com/a/VT0O9z1V +TB_Flask_invite: https://classroom.github.com/a/vUCgTp_H +TB_Geocoding_invite: https://classroom.github.com/a/UKomD-0o +TB_ImageSteganography_invite: https://classroom.github.com/a/YbnlGDyN +TB_MachineLearning_invite: https://classroom.github.com/a/IbIG_r9y +TB_Pickling_invite: https://classroom.github.com/a/SsV459Fm +TB_WordFrequency_invite: https://classroom.github.com/a/kmVu1VaR +TB_survey: https://goo.gl/forms/scadXM2cd59XeMGs2 diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 2baa1572..e05e0925 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -1,36 +1,38 @@ +- title: Course Materials + children: + - title: Class Notes and Activities + url: /notes + - title: Project Toolboxes + url: /toolboxes/ + - title: Reading Journal + url: /reading-journal/ + - title: Library Reserves + url: https://olin.tind.io/record/1588272 + +- title: Course Pages + children: + - title: Calendar + url: /calendar/ + - title: Course Policies + url: /policies/ + - title: Resources children: + - title: Setup Your Environment + url: /activities/setup - title: Resources url: /resources/ - title: Recipes url: /resources/recipes/ - title: Think Python url: http://greenteapress.com/wp/think-python-2e/ - - title: Python 3.5 Documentation - url: https://docs.python.org/3.5/ - - title: Python 3.5 Standard Library - url: https://docs.python.org/3.5/library/index.html + - title: Python 3.6 Documentation + url: https://docs.python.org/3.6/ + - title: Python 3.6 Standard Library + url: https://docs.python.org/3.6/library/index.html - title: Python Tutor url: http://www.pythontutor.com - title: Git Help url: /resources/#git -- title: Course Materials - children: - - title: Reading Journal - url: /reading-journal/ - - title: Lecture Notes - url: /notes - - title: Handouts and Activities - url: /handouts/ - - title: Library Reserves - url: https://olin.tind.io/record/1512034?ln=en -- title: Course Pages - children: - - title: Calendar - url: /calendar/ - - title: Course Description - url: /description/ - - title: Course Policies - url: /policies/ diff --git a/_data/team.yml b/_data/team.yml index 7f3bb9cb..68894217 100644 --- a/_data/team.yml +++ b/_data/team.yml @@ -1,21 +1,9 @@ -- first_name: Duncan - office_hours: Sunday, 6-8pm - office_location: Library -- first_name: Emily - office_hours: Saturday, 4-6pm - office_location: Library -- first_name: Hannah - office_hours: Tuesdays 7-9 pm - office_location: Library -- first_name: Matt - office_hours: TBD because SCOPE - office_location: Library -- first_name: Seungin - office_hours: Sunday, 4-6pm - office_location: Library -- first_name: Tony - office_hours: Wednesday TBD - office_location: -- first_name: Oliver - office_hours: Drop in or by appointment - office_location: MH 365, or Slack to find me +- first_name: Paul + office_hours: by appointment + office_location: AC112 +- first_name: Amon + office_hours: by appointment + office_location: AC312 +- first_name: Ben + office_hours: by appointment + office_location: MH329 diff --git a/_includes/assignment b/_includes/assignment index 4c86f9d2..ff8169b8 100644 --- a/_includes/assignment +++ b/_includes/assignment @@ -1,17 +1,17 @@ {% if assignment.parts %} -

{{ assignment.title }} – due +
{{ assignment.title }} – due {% for part in assignment.parts %} - {{ part.due | date: site.due_date_format }} + {{ part.due | date: site.due_date_format }} {% if forloop.rindex > 1 %}; {% endif %} {% if forloop.rindex == 2 %}and{% endif %} {% endfor %}
{{ assignment.description }}
{% elsif assignment.due %} -
{{ assignment.title }} – due {{ assignment.due | date: site.due_datetime_format }}
+
{{ assignment.title }} – due {{ assignment.due | date: site.due_datetime_format }}
{{ assignment.description }}
{% endif %} diff --git a/_layouts/default.html b/_layouts/default.html index 67596828..e9b52447 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -16,15 +16,15 @@ {% include mathjax %} - - + +