Intro to Comp. Sci  (year) - 2

Spring 2020 -- Peter Brooks

Here it is:

Project Master Link Page
Decide whether you want your name/project listed on the IntroCS-2 Project Page.  It will look very much like the Personal Homepage Link page we had early in the semester.
This is a great way to show your friends, family, creditors and enemies what a cool website you've put together.
So... Fill out this form
This is "opt-in", which means that:
0. If you don't decide, or you decide "no" then your name will not appear
1. If you fill out the form with "yes", then it will appear.
2. Individuals in partnerships can make individual decisions.
Office hours:
 Thurs. 10:30a - 12:30p
Thurs. 4:00p - 6:00p
Thurs. 10:15p - midnight

Mon (6/15): noon - 2:00
Write me email when you'll be arriving...
Final project hand-in, June 12

No late penalty until Mon. morning 8:00am
ZIP all of your files (both HTML and Python, but no data files) into a file.  Upload that and put the URL for your landing page onto the Comments to Teacher.
Personal Homepages Need to be Moved to Moe!

due Wed night (6/10).
The personal homepages that y'all created back in the beginning of March need to move to Moe (if you need the "extra boost" I promised).  That's because the all of the main computers at Stuy have gone down, and the building is off-limits at his time.  The Stuy computers contain your personal pages, and I need to evaluate them to provide that "extra boost".  However, I've not been able to find the time until now that I have office hours, to do the evaluation.  In a wonderful instance of perfect timing, the last Stuy computer went down today.

If you don't need that "extra boost", you do not need to move your homepage.
If you feel that you do but are unable to reconstruct your homepage on Moe, we'll need to figure out if and how to provide that "extra boost". 

So... to move:
Copy all of your homepage files from your computer (remember, Marge, Lisa and Homer are down) up to your public_html directory (or a subdirectory of public_html that you create) on Moe.  Test (test) (also test) your personal homepage and then put the URL onto the homework server slot that says: "Personal homepage on Moe". DO NOT PUT IT IN THE FINAL PROJECT SLOT!
Hackathon for girls June27. Online. Free. 7:00am - 7:00pm
Final project, due June 12 Project requirements:
1. The project must correspond, as closely as possible, to the proposal that I accepted on the homework server.
2. It must be thoroughly tested so that any bugs DO NOT CRASH it.  If there are problems with what the user enters or selects, provide guidance to the user to get back on track.
3. The project must have an ABOUT page, with a prominently visible link to it on the primary page of the project (link either on top or bottom of the primary page).
4. Remember: if the Python program used by your website on moe has to write data to any files, those files must be located on your public_html/www directory.
5. Put the link to your primary page into the Comments-to-Teacher.

The ABOUT page should contain:
a) The name of the project
b) The author(s)
c) The intent of the project, and any instructions that are not elsewhere on how to use it successfully (with possible examples of its usage).
d) Any differences between what the project does and what the proposal said it would do (it would be best if I didn't find those differences myself)
e) Any bugs or problems that you are aware of that the user should avoid triggering (again, it would be best,...etc.)
f) Sources of information, sources of code, sources of data used.
g) Any interesting insights or experiences you've had in going through the creation journey.
h) Acknowledgements of those who helped.
Cookies! How to set: set_cookies.txt
How to get: show_cookies.txt
Demo (V.2)
Keeping score in web interaction Using the <input type="hidden"  HTML tag to keep score and keep a history of previous pages that your user had just visited.
Here's a demo of it.
Here's the Python program.
Here's the first HTML page (input_hidden_1)
Personal Web Server The PythonWebServer (pws-24) is now available.  It is a webserver program that's designed to run on your laptop so you can try out and debug your websites without uploading them to moe.  Feel free to use it, however I will not be able to debug installations of it if it does not quite work on your laptop (especially Macs).  Follow the installation directions supplied by the link above.  Nevertheless send bug reports to me.
Dojo is alive and waiting
Project Proposal, due Sat. 5/30 midnight Write your proposal into the Comments-to-Teacher.  Answer the following questions:
0. solo or duo?  If duo, who is your partner?  Also if duo, both of you MUST submit project proposals (probably identical)
1. a quick description of the website you're planning.
2. Why will the user return (possibly repeatedly) to your site?  What value will the site have for the user?

3. If you're processing information obtained from elsewhere on the net, where is it coming from?  Have you obtained it and looked at it to make sure that you'll be able to write a Python program to access the data that you'll deliver to your users?
Remaining Daily Digital schedule
Data sources galore! Here are the data sources that y'all found on the net.
Matplotlib example (histogram) and histogram/bar chart homework.
Due, Wed. 5/27 midnight.
Here's a complete running matplotlib histogram example using the SAT-2010 and SAT-2012 datafiles from NYC Open Data.
Here's the homework: 2 histograms and one bar chart.  There's been a fix to the data file used by this homework.
Intro to Matplotlib This is a graph plotting package for Python.  Quite easy to use.  Main docs are here at

We'll install it in Thonny on Windows, if it's not already installed, using Thonny's "Tools/Manage packages" menu item.
For Mac folks, if it's not already there, download the following version of Thonny:

Here's a video from Mr. Dyrland-Weaver on installing Matplotlib on Thonny.

Here's the tutorial you should go through for learning to use the pyplot object of matplotlib
Homework -- first interactive page.  Put a link to your working html page in the Comments-to-Teacher and also upload your Python file.  Due, Fri, 5/22 midnight Create two files in your public_html directory: an HTML page called "letter-form.html" asking a set of 3 questions used to generate a letter, and a Python program called "" that processes the data when the button is pressed and sends the typical web page below.

Note: Whatever the user fills in or does not, your program must not crash.  If there's a problem, give the user a decent error message.

letter-form.html looks like this:
The webpage response should something look like this (the date need not be accurate): Monday, 3rd month, 12 B.C.E.

Dear Ms. Canaanite-Smith

It is with great pleasure that we have decided to send you this kangaroo as a small token of our esteem.

Unfortunately, returns are currently not possible.
The Management
Some cool projects from yesteryear  
Webpage input controls (buttons, checkboxes, etc.)
First webpage with input Html is here.  Python is here.
Random webpage time...
due Mon, 5/18
Let's try to write a random webpage.  First, figure out how to get random numbers from Python.
Then, let's use the data in the big SAT.csv file to report on a random school. Here's the main homework.
Addressing Python execution problems. The Conditions for Peace
between Webservers and Python programs
Python on the web server. Your first python-generate web page should be the following... On moe, that you've logged into using either ssh or putty, connect to your public_html directory and using nano, create the following file called  Type the commands below exactly as they appear.  There are exactly 4 lines:

#! /usr/bin/python

print('Content-type: text/html\n')
print('<html><body>Python runs!</body></html>')

Having stored this into the file, now change its file permissions to executable using the command:

chmod +x

...and then you can test it by going back to your browser, opening a new tab and typing:
Some recursive exercises, due Thu. night. Here are my answers.
Fibonacci: Here's what we covered on Friday: non-recursive and recursive functions for fib(), and how to time their execution.
2 quick recursions construct, for classtime, the two functions:
find(s,c) returns the position of the first occurrence of the character in argument c inside the string s, or -1 if c is not found
reverse(L) reverses the order of the elements in the list L

Here are some interesting solutions from students that we covered today...
Daily Digital Presentation Schedule
Dictionaries homework.
Due: Wed. 5/6 midnight
Problems are here.
Assigment: You'll be calculating, writing answers, and finally writing the HTML of a webpage with your Python program.
Due, Fri, 5/1 midnight.
The Basel Problem.
Let's find good sources of data!
Due Tues, midnight.
We'll take a quick look at NYC Open Data, and the next assignment is to go out there and fish...for interesting, downloadable data.
We're looking for data that can be downloaded, can be processed by a Python program, is free (not behind a paywall), and is interesting.  That amounts to pure textual files, or CSV or TSV files.
Report your data catch here:

Your submissions have been reformatted into a web page, sorted by URL: DataSourcesWeb.html
Homework for Sat night, 4/25

Once more, here's the Table of Contents of the mini-tutorials:

Here's the homework -- you'll need to read the SAT data file, split lines, convert strings to numbers, handle names with commas embedded in them, and sort the information ot get the value you need.

Best preparation: Read the mni-tutorials on Split and Join (see the TOC to the left) and the one on working with CSV files and Sorting.
Wed. Apr 22 -- I won't be "in school" today (minor family issue). Read how to use the sorted() function in Python (there's section on sorting  here).

Also, look at the following file SAT-2010-small.csv.  It's a csv file, but some lines don't follow the expected "rules" and will crash your Python program if you're not aware of the problems.  Find the problems (there are at least two different types of problems in this file).  Look at the file with an ordinary text editor and also with a spreadsheet.  We'll talk about this on Thurs.
Mon. Apr. 20.  We're back!

Homework, due Tues, night.
Starting on file-reading & writing.  We'll be using the sections described here:(
On the following topics:
File reading and Writing and Try/Except
Reading/Using CSV files

Assignment: Create a function MaxSalary(filename), that will read files just like the sample.csv file mentioned in the Reading/Using CSV files section, and returns a list containing the name of the person who has the highest salary, and the salary itself.  Example:
print(MaxSalary('sample.csv'))  # -> ['Voldy', 28.1]

Here's the file you'll use: salaries.csv
Put the answer into the Comments-to-Teacher, and upload the file to the homework slot .
Tues, Apr. 7 Here are several explanatory pages on Python and the Python-HTML connection.  Take a look at Split/Join
Monday, Apr. 6 Encryption!
We'll still be using Zoom for a day or two, until transition to Google Meet or Microsoft Teams.
Team puzzle competition from Harvard Daniel Lyalin from Period 4 Intro brings this to our attention:
"Daniel Lyalin
11:08 AM (12 hours ago)

Hi, I've attached links to both the main page and puzzle packet for the 2020 CS50x Puzzle Day challenge.
No prior CS experience is necessary for the competition, though I'd argue some problems can be solved
via a well-designed program and some are easier to crack if you have computer science vocabulary knowledge.
Anyway, these problems are fun and help build logical thinking skills used in cryptography and programming.
Daniel Lyalin
Beta-testing help I've just finished V.2 of the Schedule app that a lot of people have been using (for years).  I'd appreciate it if some of you tried the beta-version out and told me of any issues it might have.  Testing will require downloading a free utility (one for Windows users, another for MacFolk).  Please send comments to me with the Subject line: "Schedule V.2".  Here is the beta:
Please read the Instructions found by pressing "Why a new version?" on the main schedule page.
Homework due on Sun night on the homework server Here are String exercises, of somewhat increasing usefulness (and difficulty).  We're doing cryptography and also some useful name processing.  I've included an optional Double Challenge problem.
Put all of the functions that you've created into a single .py file, and upload that to the homework server.  While doing that, also put the answer to the optional Double Challenge problem into the Comments-to-Teacher.
The Dojo is open for business Instructions from the Dojo-folks:
Dojo will now be available online through slack. Please share this link ( with your students and ask they use their account to sign up.
The News Literacy Project This is an organization that detects misinformation/fake news in the news, particularly helpful with COVID misinformation.  It is excellent, and I have been subscribing to it for years.  Check it out and think about subscribing.
Tues, 3/31 Zooming.  Looking at ASCII coding and letter-shifting.
Do problems in the group: Character Manipulation
Mr. K's CodingBat Problems Here are the answers to Mr. K's CodingBat problems.
Monday, 3/30 Zoom Meetings, same schedule as school period times from now on, including on Wed, Conference Schedule days.  Same Meeding ID and password as Friday, and true going forward.

Today, we start on encryption.

A list of string methods can be found here.
Here are some string functions, a keyword and methods.
Do the first 4 exercises in Mr. K's "Character Manipulation" set.
Friday, 3/27 Zoom Meetings, same schedule as Tues from now on, except on Wed, Conference Schedule days.
Meeting ID/Pwd will be sent to you by email (keep that data).

The next set of exercises are Mr K's group: "String and Loops".  Do not use the built-capabilities and functions: ".find", ".count", or the "in" operator -- I realize that removes shortcuts, but I'm getting you to do things with loops.  Later, we'll use these methods and functions.
The Daily Digital (DD) The Daily Digital consists of 3 tasks:
0) Choose a topic/event/accomplishment of newsworthy importance that has to do with the digital world that interests/intrigues you.
1) Write a paragraph or two explaining why it's interesting, and post it on the Intro QAF.
2) Report on it during a 5-minute DD session at the beginning of the period on the day assigned to you (each person will know in advance).  There will be time for questions afterwards.

I've posted a sample DD in the QAF.
The Presentation Schedule
Thurs, 3/26 Regular meeting times (see Tues, below)
Period 4: Meeting ID: 164-555-967
Periods 8-10: Meeting ID: 148-166-363
Wed., Mar 3/25 This is a Conference day so the Zoom session times will move a little
Meeting ID: 968-834-592
Period 4: 10:00

Meeting ID: 940-161-203
Period 8: 12:50pm
Period 9: 1:30pm
Period 10: 2:10pm

Do the exercises in the String-2 and List-2 sets mostly with for and a few with while.  Note: the particular exercise: sum67 in List-2 is requires more thinking than usual.

What we covered:  Splitting a non-negative integer into its ones digit and the rest.  Given an integer n=157, we can do the splitting in two different ways: using arithmetic or using strings:
A)  ones digit:  n % 10 7 and the rest:  n // 10 15
turn the number into a string using the str() function:
s = str(n)  and ones digit is s[-1] '7'  and the rest is s[:-1] → '15'

We are going to do the numeric exercises in Mr. Konstantinovich's version of CodingBat:
Starting on the exerecise groups: "Looping Numbers" and "Looping over Digits"
Tues, 3/24 Zoom sessions at regular school period times:
Meeting ID: 805-292-466
Period 4: 10:20am 

Office hours today: 12:00 - 1:00

Meeting ID: 512-797-337

Period 8: 1:25 pm 
Period 9: 2:10pm
Period 10: 3:00pm
(no more 6:00 Catchall sessions...)

Do by today:  Warmup-2 with while in CodingBat (even though you may have a shorter way of writing the code for some of these exercises).

Looping docs, new, improved -- now with for and other nutrients (range)
Monday 3/23 Same Zoom session times as Thursday. 

Thonny: I mentioned that I was looking at a competitor to IDLE, called Thonny.  Yes.  Go to the Thonny site, read about its capabilities, then download and install (see installation instructions below), and try it.  We'll be using Thonny for a while -- it's easier to show and test code in this split-screen environment.  There's a quick tutorial video on that Thonny main webage.

Thonny installation instructions:
- The simplest is to go to the Thonny site: and see at the top of the page the download links for Windows and Mac (and instruction for Linux)
- If you're having some trouble, here's a video on installing it.

CodingBat: Finish sections String-1 and List-1 by today.  We are going on to looping.  Assignment (=), decisions (if) and looping (while, for) are the basic dynamic operations in Python.

Looping docs (while)
Thursday, 3/19: Zoom sessions (Thursday) at regular school period times:
Period 4: 10:20am
Period 8: 1:25 pm
Period 9: 2:10pm
Period 10: 3:00pm
Could not make it to my to my regular time, session: 6:00pm

We'll be going over lists, so look at the handout below, and do the exercises, and have questions prepared.  We'll also be looking at some more advanced list capabilities (list methods). 
I showed a great website listing the most popular list and string methods (for Python 2.7).  Here it is:  Go to that page, and find the word "string" or :list" in the first section "Contents", and click on it.
Wednesday: Lists: basics + CodingBat problems Here are the basic properties of lists.  Read every example next to the explanation and make sure you understand it.  If you don't, ask during the next Zoom session.
Regular CodingBat porblems: "List-1".  Remember to log in.
This is a slot for Covid-19 resources "Social distancing" and "flattening the curve": Watch this video from the CDC (6.5 min).
Tues, March 17

...moving into a new realm...

We're going to try out ZOOM!

You should all have received email from me about 2 sessions on Tues, with instructions and meeting IDs and passwords to try out this free online video conferencing software.  If you're going to be using your smartphone instead of a computer/tablet, download the Zoom app ahead of time.

We'll be getting together separately, according to Periods this time (but possibly all together on other days).

  • Period 4: 12:20pm
  • Period 8: 12:40pm
  • Period 9: 1:00pm
  • Period 10: 1:20pm

If you cannot make your period's meeting time, there will be a 6:00pm session as well for anyone who couldn't make it previously.

Afterwards, fill out the survey form (even if you couldn't make a session):

Monday, March 16
Schools closed until April 20.
We're starting a whole new way of learning/communicating, along with the rest of the world.  Stay tuned to this channel.  I am looking at some alternatives (like Zoom to talk with y'all occasionally).  Most of you (and by Mon afternoon, all of you) have been signed up for the Google Group Intro QAF, for questions and discussions.
More later...
CodingBat problems solved by Sat. night (3/14)
  • Here's the regular CodingBat ( site that we'll be using today and until Sat night (not the version that Mr. Konstantinovich created).
  • Go to this site.
  • Log in
  • Switch to the Python problems.
  • Do the problems in sections STRING-1, LOGIC-1 and LOGIC-2
  • I will be able to see which problems you've solved
Personal Homepages!!

Votes due on the homework server by Sat. 3/14 midnight
They are HERE  The voting results are in.
  1. View ALL of the pages for the students in your class (not just the ones in your competition).
  2. Vote only for students in your class.
  3. Post, in the homework slot, your vote for the 1st and 2nd best, by name of student. 
  4. Do not vote for yourself -- will not be counted.
  5. No vote-buying, no threatening, NO COLLUSION!
CodingBat Registration instructions
Python cribsheet We will cover all of the aspects of the language that are detailed in the cribsheet.
Personal homepage (home-site), due Sun, 3/8 midnight.
  1. Remember your Construction-Details page citing all the help, code, moral support you received, the problems you overcame, the new skills you acquired.
  2. You'll need to upload your homepage(s) to your public_html directory.
  3. then test your URL that you will publish to the outside world.  For instance, if your login id is "fred" and your homepage is "harry.html" then the URL will be  Make sure you TEST YOUR  LINK
  4. Into the homework slot's Comments-to-Teacher, copy your URL and say whether you want to enter the class competition or not.  If you forget to specify this, I'll assume that you want to compete.
Friday's test Here are my answers.
Try downloading,  installing and running Python by Mon, 3/2 classtime.  Bring back installation warstories Installing Python
Here's a list of the HTML tags you should know for Fri's HTML quizs
Sample of good student homepages  
Unix commands quiz and answers (from last Friday)  
Web Authoring tools, due Thurs. 2/27, midnight Find and evaluate free web authoring tools.  That means look at the descriptions and choose one or more, download it/them and evaluate.  Write a review on the Google Docs page hat you've been sent a link for.  The program should allow you to edit both the visual version and the HTML version of your document.

If the tool that you've chosen to use is not on your own laptop (it's a web-based editor, running in your browser), then make sure that you can download the resultant HTML file that you creat,  and that you can incorporate a picture that your have on your laptop into the document.
CSS and Javascript Here's a small demo of both CSS directives and Javascript language code.
CSS controls the visual style of the content of a page, although older HTML tags still do some (like <b> and <i>).
Javascript is a full-fledged language, like Python, Java and Netlogo.  It is used to control anything dynamic on the page (anything that moves or responds).
First HTML homework, due: end of mid-winter break: Sun 2/23, midnight a) Construct a page that looks like this (your can change the text, but it should have at least a numbered list and a table with the same structure, at least a picture and a link to some blissful nirvana). 
b) Upload the html file to your public_html directory.
c) Create and test a URL that allows anyone knowing it to see your page over the internet
d) type that URL into the Comments-to-Teacher in the homework slot for this assignment
HTML References found You should find a good site on the net that offers an HTML reference and/or tutorial.  You have been sent an invitation to add the site you found to a table to show others in your class, along with your quick review as to why it's good. 
Opportunities that have come wizzing into my emailbox:
CodeDay: 24 hours of code starting on Sat. Feb 15 hosted at MakerBot (Brooklyn -- MetroTech Center)
"CodeDay is a worldwide event where student programmers, artists, musicians, actors, and everyone else can get together and build apps & games for 24 hours. Students of all skill levels are welcome  we have workshops and mentors who can help if you're new!
PACT: Program in Algorithmic and Combinatorial Thinking
A non-residential summer program at Princeton Univ.
Girls Who Code summer program (80 programs around the country): FREE, 7-week program for 1011th-grade girls (rising juniors and seniors)  FAQ
Connecting to Stuy's computers from home: Instructions here.
Monday, Feb. 3:

Try using the "ls" command with directory arguments

For instance:  After logging in, you'll be in your home directory.  Try:
ls bashcrawl
ls bashcrawl/..
ls /

You can specify any directory address with ls.  And also with ls -F as in
ls -F bashcrawl

Also, take a look at:
ls -l
ls -al

Unix commands... We're trying an experiment...   An adventure game to learn Unix commands:
Get thee into a Terminal window  (fast way: Ctrl-Alt t)
Read all of the instructions below before executing any of the commands (in red)...

Execute the following 3 commands exactly (note where the spaces and punctuation are)

scp  -r  ./
After you execute that command, you'll be asked for your password.  While you type your password, you won't see the letters you type ... that's all right, just finish and hit the Enter key.  Lots of output will be sprayed at you.  That's all right too.

cd  bashcrawl/entrance

cat  scroll

In this game, you'll be entering rooms (actually directories) using the "cd" command, and then looking at the contents of a room (the files in the directory) using the "ls" command, and then perhaps, displaying the contents of files (partcularly the "scroll" file) using the "cat" command.

If you want/have to start over, type the "cd" command without arguments, and then continue with the red command above ("cd  bashcrawl/entrance").
First task: fill out your Profile on the Homework server.
  1. Go to the main class link page (
  2. Click on the Homework/Grade server link
  3. Choose the Profile menu item
  4. Choose your period and name
  5. Log in with your OSIS number as your password
  6. Fill out your email address and preferred first name only, DO NOT CHANGE YOUR PASSWORD YET.
  7. Save: (Change Profile button)...
  8. (optional, but recommended): now you can change your password for this Homework server, if you want.
  9. REMEMBER this password!
Help from Mr. Brooks Feel free to come and see me during periods 5, 6, or 7 in room 301 (just walk in) or by appointment beforehand just after school also in room 301.
Sending email to Mr. Brooks:
Send mail to:

You MUST include your name in the subject line or body of the message, otherwise I won't know who it's from.
Stuyvesant bell schedule  
Homework/grade server  
Support Wikipedia