├── 10_exercise_10_2.py ├── 11_regular_expression.py ├── 12_Following_Links_in_Python.py ├── 12_Scraping_HTML_Data_BeautifulSoup.py ├── 12_request_response_cycle.py ├── 13_Extract_Data_from_JSON.py ├── 13_Extracting_Data_from_XML.py ├── 13_Using_the_GeoJSON_API.py ├── 15_Many_Students_in_Many_Courses.py ├── 15_create_emaildb.py ├── 15_create_orgdb.py ├── 15_orgdb.sqlite ├── 15_rosterdb.sqlite ├── 15_trackdb.sqlite ├── 15_tracks.py ├── 1_hello_world.py ├── 2_exercise_2_3.py ├── 3_exercise_3_1.py ├── 3_exercise_3_3.py ├── 4_exercise_4_6.py ├── 5_exercise_5_2.py ├── 6_exercise_6_5.py ├── 7_exercise_7_2.py ├── 8_exercise_8_4.py ├── 8_exercise_8_5.py ├── 9_exercise_9_4.py ├── Library.xml ├── README.md ├── emaildb.sqlite ├── mbox-short.txt ├── mbox.txt ├── regex_sum_42.txt ├── regex_sum_57123.txt ├── romeo.txt └── roster_data.json /10_exercise_10_2.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 10.2 3 | 10.2 Write a program to read through the mbox-short.txt and figure out the distribution by hour of the day for each of the messages. You can pull the hour out from the 'From ' line by finding the time and then splitting the string a second time using a colon. 4 | 5 | From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008 6 | 7 | Once you have accumulated the counts for each hour, print out the counts, sorted by hour as shown below. 8 | """ 9 | name = input("Enter file:") 10 | if len(name) < 1 : name = "mbox-short.txt" 11 | handle = open(name) 12 | hours = {} 13 | for line in handle: 14 | if "From:" in line: continue 15 | elif "From" in line: 16 | tmp = line.split( ) 17 | tmp = str(tmp[5]).split(":") 18 | if tmp[0] not in hours: 19 | hours[tmp[0]] = 1 20 | else: hours[tmp[0]]=hours.get(tmp[0],0) + 1 21 | else: continue 22 | for k,v in sorted(hours.items()): 23 | print(k,v) 24 | -------------------------------------------------------------------------------- /11_regular_expression.py: -------------------------------------------------------------------------------- 1 | """ 2 | Regular Expressions 3 | Finding Numbers in a Haystack 4 | 5 | In this assignment you will read through and parse a file with text and numbers. You will extract all the numbers in the file and compute the sum of the numbers. 6 | Data Files 7 | 8 | We provide two files for this assignment. One is a sample file where we give you the sum for your testing and the other is the actual data you need to process for the assignment. 9 | 10 | Sample data: http://py4e-data.dr-chuck.net/regex_sum_42.txt (There are 90 values with a sum=445833) 11 | Actual data: http://py4e-data.dr-chuck.net/regex_sum_57123.txt (There are 49 values and the sum ends with 560) 12 | 13 | These links open in a new window. Make sure to save the file into the same folder as you will be writing your Python program. Note: Each student will have a distinct data file for the assignment - so only use your own data file for analysis. 14 | Handling The Data 15 | 16 | The basic outline of this problem is to read the file, look for integers using the re.findall(), looking for a regular expression of '[0-9]+' and then converting the extracted strings to integers and summing up the integers. 17 | """ 18 | import re 19 | #numbers = [] 20 | total = 0 21 | fname = input("Enter file:") 22 | if len(fname) < 1 : fname="regex_sum_42.txt" 23 | handle = open(fname) 24 | for line in handle: 25 | numbers = re.findall("[0-9]+",line) 26 | if not numbers: continue 27 | else: 28 | for num in numbers: 29 | total = total + int(num) 30 | print(total) -------------------------------------------------------------------------------- /12_Following_Links_in_Python.py: -------------------------------------------------------------------------------- 1 | """ 2 | Following Links in Python 3 | 4 | In this assignment you will write a Python program that expands on http://www.py4e.com/code3/urllinks.py. The program will use urllib to read the HTML from the data files below, extract the href= vaues from the anchor tags, scan for a tag that is in a particular position relative to the first name in the list, follow that link and repeat the process a number of times and report the last name you find. 5 | 6 | We provide two files for this assignment. One is a sample file where we give you the name for your testing and the other is the actual data you need to process for the assignment 7 | 8 | Sample problem: Start at http://py4e-data.dr-chuck.net/known_by_Fikret.html 9 | Find the link at position 3 (the first name is 1). Follow that link. Repeat this process 4 times. The answer is the last name that you retrieve. 10 | Sequence of names: Fikret Montgomery Mhairade Butchi Anayah 11 | Last name in sequence: Anayah 12 | Actual problem: Start at: http://py4e-data.dr-chuck.net/known_by_Meron.html 13 | Find the link at position 18 (the first name is 1). Follow that link. Repeat this process 7 times. The answer is the last name that you retrieve. 14 | Hint: The first character of the name of the last page that you will load is: G 15 | 16 | Strategy 17 | 18 | The web pages tweak the height between the links and hide the page after a few seconds to make it difficult for you to do the assignment without writing a Python program. But frankly with a little effort and patience you can overcome these attempts to make it a little harder to complete the assignment without writing a Python program. But that is not the point. The point is to write a clever Python program to solve the program. 19 | 20 | paramters to enter: 21 | Enter url: http://py4e-data.dr-chuck.net/known_by_Meron.html 22 | Enter count: 7 23 | Enter position: 18 24 | 25 | """ 26 | # To run this, you can install BeautifulSoup 27 | # https://pypi.python.org/pypi/beautifulsoup4 28 | 29 | # Or download the file 30 | # http://www.py4e.com/code3/bs4.zip 31 | # and unzip it in the same directory as this file 32 | 33 | import urllib.request, urllib.parse, urllib.error 34 | from bs4 import BeautifulSoup 35 | import ssl, sys 36 | 37 | # Ignore SSL certificate errors 38 | ctx = ssl.create_default_context() 39 | ctx.check_hostname = False 40 | ctx.verify_mode = ssl.CERT_NONE 41 | 42 | url = input('Enter url: ') 43 | count = input('Enter count: ') 44 | position = input('Enter position: ') 45 | 46 | html = urllib.request.urlopen(url, context=ctx).read() 47 | soup = BeautifulSoup(html, 'html.parser') 48 | 49 | # Retrieve all of the anchor tags 50 | print("Retrieving",url) 51 | tags = soup('a') 52 | for i in range(int(count)): 53 | links = [] 54 | for tag in tags: 55 | links.append(str(tag.get('href', None))) 56 | html = urllib.request.urlopen(links[int(position)-1], context=ctx).read() 57 | soup = BeautifulSoup(html, 'html.parser') 58 | print("Retrieving",links[int(position)-1]) 59 | tags = soup('a') 60 | -------------------------------------------------------------------------------- /12_Scraping_HTML_Data_BeautifulSoup.py: -------------------------------------------------------------------------------- 1 | """ 2 | Scraping Numbers from HTML using BeautifulSoup In this assignment you will write a Python program similar to http://www.py4e.com/code3/urllink2.py. The program will use urllib to read the HTML from the data files below, and parse the data, extracting numbers and compute the sum of the numbers in the file. 3 | 4 | We provide two files for this assignment. One is a sample file where we give you the sum for your testing and the other is the actual data you need to process for the assignment. 5 | 6 | Sample data: http://py4e-data.dr-chuck.net/comments_42.html (Sum=2553) 7 | Actual data: http://py4e-data.dr-chuck.net/comments_57125.html (Sum ends with 54) 8 | 9 | You do not need to save these files to your folder since your program will read the data directly from the URL. Note: Each student will have a distinct data url for the assignment - so only use your own data url for analysis. 10 | """ 11 | 12 | # To run this, you can install BeautifulSoup 13 | # https://pypi.python.org/pypi/beautifulsoup4 14 | 15 | # Or download the file 16 | # http://www.py4e.com/code3/bs4.zip 17 | # and unzip it in the same directory as this file 18 | 19 | 20 | from urllib.request import urlopen 21 | from bs4 import BeautifulSoup 22 | import ssl 23 | 24 | #parameter 25 | content = [] 26 | total = 0 27 | # Ignore SSL certificate errors 28 | ctx = ssl.create_default_context() 29 | ctx.check_hostname = False 30 | ctx.verify_mode = ssl.CERT_NONE 31 | 32 | url = input('Enter - ') 33 | html = urlopen(url, context=ctx).read() 34 | 35 | # html.parser is the HTML parser included in the standard Python 3 library. 36 | # information on other HTML parsers is here: 37 | # http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser 38 | soup = BeautifulSoup(html, "html.parser") 39 | 40 | # Retrieve all of the anchor tags 41 | tags = soup('span') 42 | for tag in tags: 43 | content.append(tag.contents[0]) 44 | 45 | for i in range(len(content)): 46 | total = total + int(content[i]) 47 | print("Sum:",total) -------------------------------------------------------------------------------- /12_request_response_cycle.py: -------------------------------------------------------------------------------- 1 | """ 2 | this program didn't work - kept getting 404. Ended up using Firebug to manually examine the headers 3 | """ 4 | 5 | import socket 6 | 7 | mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 8 | HOST = "www.data.pr4e.org" 9 | PORT = 80 10 | mysock.connect((HOST, PORT)) 11 | cmd = "GET http://data.pr4e.org/intro-short.txt HTTP/1.0\n\n".encode() 12 | #mysock.connect(('www.py4inf.com', 80)) 13 | #cmd = 'GET http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n'.encode() 14 | mysock.send(cmd) 15 | 16 | while True: 17 | data = mysock.recv(512) 18 | if (len(data) < 1): 19 | break 20 | print(data.decode()) 21 | 22 | mysock.close() -------------------------------------------------------------------------------- /13_Extract_Data_from_JSON.py: -------------------------------------------------------------------------------- 1 | """ 2 | Extracting Data from JSON 3 | 4 | In this assignment you will write a Python program somewhat similar to http://www.py4e.com/code3/json2.py. The program will prompt for a URL, read the JSON data from that URL using urllib and then parse and extract the comment counts from the JSON data, compute the sum of the numbers in the file and enter the sum below: 5 | 6 | We provide two files for this assignment. One is a sample file where we give you the sum for your testing and the other is the actual data you need to process for the assignment. 7 | 8 | Sample data: http://py4e-data.dr-chuck.net/comments_42.json (Sum=2553) 9 | Actual data: http://py4e-data.dr-chuck.net/comments_57128.json (Sum ends with 10) 10 | 11 | You do not need to save these files to your folder since your program will read the data directly from the URL. Note: Each student will have a distinct data url for the assignment - so only use your own data url for analysis. 12 | 13 | The closest sample code that shows how to parse JSON and extract a list is json2.py. You might also want to look at geoxml.py to see how to prompt for a URL and retrieve data from a URL. 14 | 15 | 16 | """ 17 | import urllib.request, json 18 | 19 | address = input('Enter location: ') 20 | print('Retrieving', address) 21 | with urllib.request.urlopen(address) as url: 22 | raw = json.loads(url.read().decode()) 23 | 24 | print('Retrieved', len(str(raw)), 'characters') 25 | data = raw.get("comments") 26 | #print(data) 27 | num = total = 0 28 | for i in range(len(data)): 29 | tmp = data[i] 30 | value = tmp.get("count") 31 | num = num + 1 32 | total = total + int(value) 33 | print("Count:",num) 34 | print("Sum:",total) -------------------------------------------------------------------------------- /13_Extracting_Data_from_XML.py: -------------------------------------------------------------------------------- 1 | """ 2 | Extracting Data from XML 3 | 4 | In this assignment you will write a Python program somewhat similar to http://www.py4e.com/code3/geoxml.py. The program will prompt for a URL, read the XML data from that URL using urllib and then parse and extract the comment counts from the XML data, compute the sum of the numbers in the file. 5 | 6 | We provide two files for this assignment. One is a sample file where we give you the sum for your testing and the other is the actual data you need to process for the assignment. 7 | 8 | Sample data: http://py4e-data.dr-chuck.net/comments_42.xml (Sum=2553) 9 | Actual data: http://py4e-data.dr-chuck.net/comments_57127.xml (Sum ends with 12) 10 | 11 | You do not need to save these files to your folder since your program will read the data directly from the URL. Note: Each student will have a distinct data url for the assignment - so only use your own data url for analysis. 12 | 13 | """ 14 | import urllib.request 15 | import xml.etree.ElementTree as ET 16 | 17 | result = 0 18 | 19 | url = input('Enter location: ') 20 | 21 | print('Retrieving', url) 22 | uh = urllib.request.urlopen(url) 23 | data = uh.read() 24 | print('Retrieved', len(data), 'characters') 25 | tree = ET.fromstring(data) 26 | 27 | counts = tree.findall('.//count') 28 | print("Count:",len(counts)) 29 | for count in counts: 30 | value = count.text 31 | result = result + int(value) 32 | print("Sum: ",result) -------------------------------------------------------------------------------- /13_Using_the_GeoJSON_API.py: -------------------------------------------------------------------------------- 1 | """ 2 | Calling a JSON API In this assignment you will write a Python program 3 | somewhat similar to http://www.py4e.com/code3/geojson.py. The program will 4 | prompt for a location, contact a web service and retrieve JSON for the web 5 | service and parse that data, and retrieve the first place_id from the JSON. A 6 | place ID is a textual identifier that uniquely identifies a place as within 7 | Google Maps. 8 | 9 | API End Points 10 | 11 | To complete this assignment, you should use this API endpoint that has a 12 | static subset of the Google Data: 13 | 14 | http://py4e-data.dr-chuck.net/geojson? 15 | 16 | This API uses the same parameter (address) as the Google API. This API also 17 | has no rate limit so you can test as often as you like. If you visit the URL 18 | with no parameters, you get a list of all of the address values which can be 19 | used with this API. 20 | 21 | To call the API, you need to provide address that you are requesting as the 22 | address= parameter that is properly URL encoded using the urllib.urlencode() 23 | fuction as shown in http://www.py4e.com/code3/geojson.py 24 | 25 | Turn In 26 | 27 | Please run your program to find the place_id for this location: 28 | 29 | Washington State University 30 | 31 | """ 32 | 33 | import urllib.request, urllib.parse, json 34 | 35 | address = input("Enter location: ") 36 | service_url = "http://py4e-data.dr-chuck.net/geojson?" 37 | 38 | full_address = service_url + urllib.parse.urlencode({'address': address}) 39 | print('Retrieving', full_address) 40 | 41 | uh = urllib.request.urlopen(full_address) 42 | data = uh.read().decode() 43 | print('Retrieved', len(data), 'characters') 44 | 45 | try: 46 | js = json.loads(data) 47 | except: 48 | js = None 49 | 50 | print(json.dumps(js, indent=4)) 51 | place_id = js["results"][0]["place_id"] 52 | print("Place",place_id) 53 | 54 | -------------------------------------------------------------------------------- /15_Many_Students_in_Many_Courses.py: -------------------------------------------------------------------------------- 1 | import json 2 | import sqlite3 3 | 4 | #create connection object 5 | conn = sqlite3.connect('15_rosterdb.sqlite') 6 | 7 | #create cursor object 8 | cur = conn.cursor() 9 | 10 | # Do some setup 11 | cur.executescript(''' 12 | DROP TABLE IF EXISTS User; 13 | DROP TABLE IF EXISTS Member; 14 | DROP TABLE IF EXISTS Course; 15 | 16 | CREATE TABLE User ( 17 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 18 | name TEXT UNIQUE 19 | ); 20 | 21 | CREATE TABLE Course ( 22 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 23 | title TEXT UNIQUE 24 | ); 25 | 26 | CREATE TABLE Member ( 27 | user_id INTEGER, 28 | course_id INTEGER, 29 | role INTEGER, 30 | PRIMARY KEY (user_id, course_id) 31 | ) 32 | ''') 33 | 34 | #read filename from cmdline 35 | fname = input('Enter file name: ') 36 | 37 | #use default if filename not entered 38 | if len(fname) < 1: 39 | fname = 'roster_data.json' #modified to read the correct sample filename 40 | 41 | # [ 42 | # [ "Charley", "si110", 1 ], 43 | # [ "Mea", "si110", 0 ], 44 | 45 | #open and load json data 46 | str_data = open(fname).read() 47 | json_data = json.loads(str_data) 48 | 49 | 50 | for entry in json_data: 51 | 52 | name = entry[0]; 53 | title = entry[1]; 54 | role = entry[2]; # store the role column 55 | #print((name, title, role)) #modified to include role 56 | 57 | cur.execute('''INSERT OR IGNORE INTO User (name) 58 | VALUES ( ? )''', ( name, ) ) 59 | cur.execute('SELECT id FROM User WHERE name = ? ', (name, )) 60 | user_id = cur.fetchone()[0] 61 | 62 | cur.execute('''INSERT OR IGNORE INTO Course (title) 63 | VALUES ( ? )''', ( title, ) ) 64 | cur.execute('SELECT id FROM Course WHERE title = ? ', (title, )) 65 | course_id = cur.fetchone()[0] 66 | 67 | cur.execute('''INSERT OR REPLACE INTO Member 68 | (user_id, course_id, role) VALUES ( ?, ?, ? )''', 69 | ( user_id, course_id, role ) ) #modified to include role 70 | 71 | conn.commit() 72 | 73 | #show results from query 74 | sqlstr = '''SELECT hex(User.name || Course.title || Member.role ) AS X FROM 75 | User JOIN Member JOIN Course 76 | ON User.id = Member.user_id AND Member.course_id = Course.id 77 | ORDER BY X LIMIT 1''' #modified the original query so that only first result shown 78 | 79 | for row in cur.execute(sqlstr): 80 | print(str(row[0])) 81 | 82 | #close cursor 83 | cur.close() -------------------------------------------------------------------------------- /15_create_emaildb.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | conn = sqlite3.connect("emaildb.sqlite") 3 | cur = conn.cursor() 4 | cur.execute('DROP TABLE IF EXISTS Counts') 5 | 6 | cur.execute('CREATE TABLE Counts (email TEXT, count INTEGER)') 7 | 8 | fname = input ("Enter filename:") 9 | if (len(fname) < 1): fname = "mbox.txt" 10 | fh = open(fname) 11 | for line in fh: 12 | if not line.startswith("From: "): continue 13 | pieces = line.split() 14 | email = pieces[1] 15 | cur.execute('SELECT count FROM Counts WHERE email = ? ', (email,)) 16 | row = cur.fetchone() 17 | if row is None: 18 | cur.execute('INSERT INTO Counts (email, count) VALUES (?,1)',(email,)) 19 | else: 20 | cur.execute('UPDATE Counts SET count = count + 1 WHERE email = ?', (email,)) 21 | conn.commit() 22 | 23 | sqlstr = 'SELECT email, count FROM Counts ORDER BY count DESC LIMIT 10' 24 | for row in cur.execute(sqlstr): 25 | print(str(row[0]), row[1]) 26 | 27 | cur.close() 28 | -------------------------------------------------------------------------------- /15_create_orgdb.py: -------------------------------------------------------------------------------- 1 | import sqlite3, re 2 | 3 | #create connection object 4 | conn = sqlite3.connect("15_orgdb.sqlite") 5 | 6 | #create cursor object 7 | cur = conn.cursor() 8 | 9 | #delete table if exists 10 | cur.execute('DROP TABLE IF EXISTS Counts') 11 | 12 | #create table with attributes org and count 13 | cur.execute('CREATE TABLE Counts (org TEXT, count INTEGER)') 14 | 15 | #read filename from cmdline 16 | fname = input ("Enter filename:") 17 | 18 | #assign default if none entered in cmdline 19 | if (len(fname) < 1): fname = "mbox.txt" 20 | 21 | #create handle to open filename entered 22 | fh = open(fname) 23 | 24 | #loop through to filter for email, then filter for org 25 | for line in fh: 26 | if not line.startswith("From: "): continue 27 | pieces = line.split() 28 | email = pieces[1] #filter for email 29 | pieces = email.split("@") 30 | org = pieces[1] #filer for org from email 31 | #org = re.sub(r'(.edu|.net|.ac|.uk|media.|.za|.com|.cam|.nl|.pt|et.|.ca)','',org) #substitude to get only org name but this is not the required answer 32 | #retrieve existing data 33 | cur.execute('SELECT count FROM Counts WHERE org = ? ', (org,)) 34 | 35 | #query database 36 | row = cur.fetchone() 37 | 38 | #if dont exists, insert, else update 39 | if row is None: 40 | cur.execute('INSERT INTO Counts (org, count) VALUES (?,1)',(org,)) 41 | else: 42 | cur.execute('UPDATE Counts SET count = count + 1 WHERE org = ?', (org,)) 43 | #commit changes to db 44 | conn.commit() 45 | 46 | #show count 47 | sqlstr = 'SELECT org, count FROM Counts ORDER BY count DESC' 48 | 49 | for row in cur.execute(sqlstr): 50 | print(str(row[0]), row[1]) 51 | 52 | #close cursor 53 | cur.close() 54 | -------------------------------------------------------------------------------- /15_orgdb.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sweehors/python-for-everybody/74fbd63f50d1b2b3fd3fc065d978bada3e052317/15_orgdb.sqlite -------------------------------------------------------------------------------- /15_rosterdb.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sweehors/python-for-everybody/74fbd63f50d1b2b3fd3fc065d978bada3e052317/15_rosterdb.sqlite -------------------------------------------------------------------------------- /15_trackdb.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sweehors/python-for-everybody/74fbd63f50d1b2b3fd3fc065d978bada3e052317/15_trackdb.sqlite -------------------------------------------------------------------------------- /15_tracks.py: -------------------------------------------------------------------------------- 1 | import xml.etree.ElementTree as ET 2 | import sqlite3 3 | 4 | #create connection object 5 | conn = sqlite3.connect('15_trackdb.sqlite') 6 | 7 | #create cursor object 8 | cur = conn.cursor() 9 | 10 | # Make some fresh tables using executescript() 11 | cur.executescript(''' 12 | DROP TABLE IF EXISTS Artist; 13 | DROP TABLE IF EXISTS Genre; 14 | DROP TABLE IF EXISTS Album; 15 | DROP TABLE IF EXISTS Track; 16 | 17 | CREATE TABLE Artist ( 18 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 19 | name TEXT UNIQUE 20 | ); 21 | 22 | CREATE TABLE Genre ( 23 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 24 | name TEXT UNIQUE 25 | ); 26 | 27 | CREATE TABLE Album ( 28 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 29 | artist_id INTEGER, 30 | title TEXT UNIQUE 31 | ); 32 | 33 | CREATE TABLE Track ( 34 | id INTEGER NOT NULL PRIMARY KEY 35 | AUTOINCREMENT UNIQUE, 36 | title TEXT UNIQUE, 37 | album_id INTEGER, 38 | genre_id INTEGER, 39 | len INTEGER, rating INTEGER, count INTEGER 40 | ); 41 | ''') 42 | 43 | #read filename from cmdline 44 | fname = input('Enter file name: ') 45 | 46 | #if filename not given use default 47 | if ( len(fname) < 1 ) : fname = 'Library.xml' 48 | 49 | # Track ID369 50 | # NameAnother One Bites The Dust 51 | # ArtistQueen 52 | 53 | #function to look for specific stuff 54 | def lookup(d, key): 55 | found = False 56 | for child in d: 57 | if found : return child.text 58 | if child.tag == 'key' and child.text == key : 59 | found = True 60 | return None 61 | 62 | #parse XML using element tree 63 | stuff = ET.parse(fname) 64 | 65 | #find all nested dict 66 | all = stuff.findall('dict/dict/dict') 67 | 68 | #print('Dict count:', len(all)) 69 | 70 | #loop through data to find specific item 71 | for entry in all: 72 | if ( lookup(entry, 'Track ID') is None ) : continue 73 | 74 | name = lookup(entry, 'Name') 75 | artist = lookup(entry, 'Artist') 76 | album = lookup(entry, 'Album') 77 | count = lookup(entry, 'Play Count') 78 | rating = lookup(entry, 'Rating') 79 | length = lookup(entry, 'Total Time') 80 | genre = lookup(entry, 'Genre') 81 | 82 | if (name is None) or (artist is None) or (album is None) or (genre is None): continue 83 | 84 | #print(name, artist, album, count, rating, length) 85 | 86 | cur.execute('''INSERT OR IGNORE INTO Artist (name) 87 | VALUES ( ? )''', ( artist, ) ) 88 | cur.execute('SELECT id FROM Artist WHERE name = ? ', (artist, )) 89 | artist_id = cur.fetchone()[0] 90 | 91 | cur.execute('''INSERT OR IGNORE INTO Genre (name) 92 | VALUES ( ? )''', ( genre, ) ) 93 | cur.execute('SELECT id FROM Genre WHERE name = ? ', (genre, )) 94 | genre_id = cur.fetchone()[0] 95 | 96 | cur.execute('''INSERT OR IGNORE INTO Album (title, artist_id) 97 | VALUES ( ?, ? )''', ( album, artist_id ) ) 98 | cur.execute('SELECT id FROM Album WHERE title = ? ', (album, )) 99 | album_id = cur.fetchone()[0] 100 | 101 | cur.execute('''INSERT OR REPLACE INTO Track 102 | (title, album_id, genre_id, len, rating, count) 103 | VALUES ( ?, ?, ?, ?, ?, ? )''', 104 | ( name, album_id, genre_id, length, rating, count ) ) 105 | 106 | conn.commit() 107 | 108 | sqlstr = '''SELECT Track.title, Artist.name, Album.title, Genre.name FROM Track JOIN Genre JOIN Album JOIN Artist ON Track.genre_id = Genre.ID AND 109 | Track.album_id = Album.id AND Album.artist_id = Artist.id ORDER BY Artist.name LIMIT 3''' 110 | 111 | #print the query results 112 | for row in cur.execute(sqlstr): 113 | print(str(row[0]), row[1],row[2],row[3]) 114 | 115 | #close cursor 116 | cur.close() -------------------------------------------------------------------------------- /1_hello_world.py: -------------------------------------------------------------------------------- 1 | #Write a program that uses a print statement to say 'hello world' as shown in 'Desired Output'. 2 | print("hello world") -------------------------------------------------------------------------------- /2_exercise_2_3.py: -------------------------------------------------------------------------------- 1 | #Exercise 2.3 2 | """ 3 | 2.3 Write a program to prompt the user for hours and rate per hour using input to compute gross pay. Use 35 hours and a rate of 2.75 per hour to test the program (the pay should be 96.25). You should use input to read a string and float() to convert the string to a number. Do not worry about error checking or bad user data. 4 | """ 5 | hrs = input("Enter Hours:") 6 | rate = input("Enter rate:") 7 | pay = float(hrs) * float(rate) 8 | print("Pay:",pay) -------------------------------------------------------------------------------- /3_exercise_3_1.py: -------------------------------------------------------------------------------- 1 | #Exercise 3.1 2 | """ 3 | 3.1 Write a program to prompt the user for hours and rate per hour using input to compute gross pay. Pay the hourly rate for the hours up to 40 and 1.5 times the hourly rate for all hours worked above 40 hours. Use 45 hours and a rate of 10.50 per hour to test the program (the pay should be 498.75). You should use input to read a string and float() to convert the string to a number. Do not worry about error checking the user input - assume the user types numbers properly. 4 | """ 5 | hrs = input("Enter Hours:") 6 | h = float(hrs) 7 | 8 | rate = input("Enter rate:") 9 | r = float(rate) 10 | if h > 40: 11 | extra = h - 40 12 | pay = 40 * r + extra * r * 1.5 13 | else: 14 | pay = 40 * r 15 | print(pay) -------------------------------------------------------------------------------- /3_exercise_3_3.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 3.3 3 | 3.3 Write a program to prompt for a score between 0.0 and 1.0. If the score is out of range, print an error. If the score is between 0.0 and 1.0, print a grade using the following table: 4 | Score Grade 5 | >= 0.9 A 6 | >= 0.8 B 7 | >= 0.7 C 8 | >= 0.6 D 9 | < 0.6 F 10 | If the user enters a value out of range, print a suitable error message and exit. For the test, enter a score of 0.85. 11 | """ 12 | score = input("Enter Score: ") 13 | score = float(score) 14 | if score >=0.9 and score >= 0 and score <=1.0: 15 | print("A") 16 | elif score >=0.8 and score >= 0 and score <=1.0: 17 | print("B") 18 | elif score >=0.7 and score >= 0 and score <=1.0: 19 | print("C") 20 | elif score >=0.6 and score >= 0 and score <=1.0: 21 | print("D") 22 | else: 23 | print("out of range") -------------------------------------------------------------------------------- /4_exercise_4_6.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 4.6 3 | 4.6 Write a program to prompt the user for hours and rate per hour using input to compute gross pay. Award time-and-a-half for the hourly rate for all hours worked above 40 hours. Put the logic to do the computation of time-and-a-half in a function called computepay() and use the function to do the computation. The function should return a value. Use 45 hours and a rate of 10.50 per hour to test the program (the pay should be 498.75). You should use input to read a string and float() to convert the string to a number. Do not worry about error checking the user input unless you want to - you can assume the user types numbers properly. Do not name your variable sum or use the sum() function. 4 | """ 5 | def computepay(h,r): 6 | pay = 40*r + (h-40)*r*1.5 7 | return pay 8 | 9 | hrs = input("Enter Hours:") 10 | h = float(hrs) 11 | rate = input("Enter Rate:") 12 | r = float(rate) 13 | if h > 40: 14 | p = computepay(h,r) 15 | print(p) -------------------------------------------------------------------------------- /5_exercise_5_2.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 5.2 3 | 5.2 Write a program that repeatedly prompts a user for integer numbers until the user enters 'done'. Once 'done' is entered, print out the largest and smallest of the numbers. If the user enters anything other than a valid number catch it with a try/except and put out an appropriate message and ignore the number. Enter 7, 2, bob, 10, and 4 and match the output below. 4 | """ 5 | largest = None 6 | smallest = None 7 | nums = [] 8 | while True: 9 | num = input("Enter a number: ") 10 | if num == "done" : break 11 | nums.append(num) 12 | nums.sort() 13 | for num in nums: 14 | try: 15 | if largest is None or int(num) > largest: 16 | largest = int(num) 17 | elif smallest is None and int(num) < largest: 18 | smallest = int(num) 19 | elif int(num) < largest and int(num) < smallest: 20 | smallest = int(num) 21 | except: 22 | print("Invalid input") 23 | print("Maximum is", largest) 24 | print("Minimum is", smallest) -------------------------------------------------------------------------------- /6_exercise_6_5.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 6.5 3 | 6.5 Write code using find() and string slicing (see section 6.10) to extract the number at the end of the line below. Convert the extracted value to a floating point number and print it out. 4 | """ 5 | text = "X-DSPAM-Confidence: 0.8475"; 6 | pos = text.find(' ') 7 | #print(pos) 8 | number = text[pos:] 9 | number.strip() 10 | print(float(number)) -------------------------------------------------------------------------------- /7_exercise_7_2.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 7.2 3 | 7.2 Write a program that prompts for a file name, then opens that file and reads through the file, looking for lines of the form: 4 | 5 | X-DSPAM-Confidence: 0.8475 6 | 7 | Count these lines and extract the floating point values from each of the lines and compute the average of those values and produce an output as shown below. Do not use the sum() function or a variable named sum in your solution. 8 | 9 | You can download the sample data at http://www.py4e.com/code3/mbox-short.txt when you are testing below enter mbox-short.txt as the file name. 10 | """ 11 | fname = input("Enter file name: ") 12 | try: 13 | fhand = open(fname) 14 | except: 15 | print("No such file exist") 16 | quit() 17 | count = 0 18 | total = 0 19 | for line in fhand: 20 | if not line.startswith("X-DSPAM-Confidence:") : continue 21 | else: 22 | pos = line.find(" ") 23 | #print (pos) 24 | new_line = line[pos:] 25 | new_line.strip() 26 | count = count +1 27 | total = total + float(new_line) 28 | average = total/count 29 | print("Average spam confidence:",average) 30 | -------------------------------------------------------------------------------- /8_exercise_8_4.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 8.4 3 | 8.4 Open the file romeo.txt and read it line by line. For each line, split the line into a list of words using the split() method. The program should build a list of words. For each word on each line check to see if the word is already in the list and if not append it to the list. When the program completes, sort and print the resulting words in alphabetical order. 4 | 5 | You can download the sample data at http://www.py4e.com/code3/romeo.txt 6 | """ 7 | fname = input("Enter file name: ") 8 | try: 9 | fh = open(fname) 10 | except: 11 | print("No such file") 12 | quit() 13 | lst = list() 14 | for line in fh: 15 | line.rstrip() 16 | prepro = line.split( ) 17 | for i in prepro: 18 | if i not in lst: 19 | lst.append(i) 20 | lst.sort() 21 | print(lst) 22 | -------------------------------------------------------------------------------- /8_exercise_8_5.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 8.5 3 | 4 | 8.5 Open the file mbox-short.txt and read it line by line. When you find a line that starts with 'From ' like the following line: 5 | 6 | From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008 7 | 8 | You will parse the From line using split() and print out the second word in the line (i.e. the entire address of the person who sent the message). Then print out a count at the end. 9 | 10 | Hint: make sure not to include the lines that start with 'From:'. 11 | 12 | You can download the sample data at http://www.py4e.com/code3/mbox-short.txt 13 | """ 14 | fname = input("Enter file name: ") 15 | fh = open(fname) 16 | count = 0 17 | for line in fh: 18 | if "From:" in line: continue 19 | elif "From" in line: 20 | lst = line.split("From") 21 | new_lst = str(lst[1]).split( ) 22 | print(new_lst[0]) 23 | count = count+1 24 | else: continue 25 | print("There were", count, "lines in the file with From as the first word") 26 | -------------------------------------------------------------------------------- /9_exercise_9_4.py: -------------------------------------------------------------------------------- 1 | """ 2 | Exercise 9.4 3 | 4 | 9.4 Write a program to read through the mbox-short.txt and figure out who has the sent the greatest number of mail messages. The program looks for 'From ' lines and takes the second word of those lines as the person who sent the mail. The program creates a Python dictionary that maps the sender's mail address to a count of the number of times they appear in the file. After the dictionary is produced, the program reads through the dictionary using a maximum loop to find the most prolific committer. 5 | """ 6 | name = input("Enter file:") 7 | if len(name) < 1 : name = "mbox-short.txt" 8 | handle = open(name) 9 | emails = {} 10 | for line in handle: 11 | if "From:" in line: continue 12 | elif "From" in line: 13 | line = line.split("From") 14 | line = (str(line[1]).strip()).split( ) 15 | if line[0] not in emails.keys(): 16 | emails[line[0]] = 1 17 | else: 18 | emails[line[0]] = emails.get(line[0],0) + 1 19 | else: continue 20 | freq = [(value,key) for key,value in emails.items()] 21 | print(max(freq)[1],max(freq)[0]) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # python-for-everybody 2 | Assignment solutions for python-for-everybody Chapter 1 to 15 (refer to https://www.py4e.com/ for details) 3 | Many thanks to Dr Charles Severance for offering the open and free version of the course 4 | -------------------------------------------------------------------------------- /emaildb.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sweehors/python-for-everybody/74fbd63f50d1b2b3fd3fc065d978bada3e052317/emaildb.sqlite -------------------------------------------------------------------------------- /mbox-short.txt: -------------------------------------------------------------------------------- 1 | From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008 2 | Return-Path: 3 | Received: from murder (mail.umich.edu [141.211.14.90]) 4 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 5 | Sat, 05 Jan 2008 09:14:16 -0500 6 | X-Sieve: CMU Sieve 2.3 7 | Received: from murder ([unix socket]) 8 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 9 | Sat, 05 Jan 2008 09:14:16 -0500 10 | Received: from holes.mr.itd.umich.edu (holes.mr.itd.umich.edu [141.211.14.79]) 11 | by flawless.mail.umich.edu () with ESMTP id m05EEFR1013674; 12 | Sat, 5 Jan 2008 09:14:15 -0500 13 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 14 | BY holes.mr.itd.umich.edu ID 477F90B0.2DB2F.12494 ; 15 | 5 Jan 2008 09:14:10 -0500 16 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 17 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 5F919BC2F2; 18 | Sat, 5 Jan 2008 14:10:05 +0000 (GMT) 19 | Message-ID: <200801051412.m05ECIaH010327@nakamura.uits.iupui.edu> 20 | Mime-Version: 1.0 21 | Content-Transfer-Encoding: 7bit 22 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 23 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 899 24 | for ; 25 | Sat, 5 Jan 2008 14:09:50 +0000 (GMT) 26 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 27 | by shmi.uhi.ac.uk (Postfix) with ESMTP id A215243002 28 | for ; Sat, 5 Jan 2008 14:13:33 +0000 (GMT) 29 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 30 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m05ECJVp010329 31 | for ; Sat, 5 Jan 2008 09:12:19 -0500 32 | Received: (from apache@localhost) 33 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m05ECIaH010327 34 | for source@collab.sakaiproject.org; Sat, 5 Jan 2008 09:12:18 -0500 35 | Date: Sat, 5 Jan 2008 09:12:18 -0500 36 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to stephen.marquard@uct.ac.za using -f 37 | To: source@collab.sakaiproject.org 38 | From: stephen.marquard@uct.ac.za 39 | Subject: [sakai] svn commit: r39772 - content/branches/sakai_2-5-x/content-impl/impl/src/java/org/sakaiproject/content/impl 40 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 41 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 42 | Content-Type: text/plain; charset=UTF-8 43 | X-DSPAM-Result: Innocent 44 | X-DSPAM-Processed: Sat Jan 5 09:14:16 2008 45 | X-DSPAM-Confidence: 0.8475 46 | X-DSPAM-Probability: 0.0000 47 | 48 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772 49 | 50 | Author: stephen.marquard@uct.ac.za 51 | Date: 2008-01-05 09:12:07 -0500 (Sat, 05 Jan 2008) 52 | New Revision: 39772 53 | 54 | Modified: 55 | content/branches/sakai_2-5-x/content-impl/impl/src/java/org/sakaiproject/content/impl/ContentServiceSqlOracle.java 56 | content/branches/sakai_2-5-x/content-impl/impl/src/java/org/sakaiproject/content/impl/DbContentService.java 57 | Log: 58 | SAK-12501 merge to 2-5-x: r39622, r39624:5, r39632:3 (resolve conflict from differing linebreaks for r39622) 59 | 60 | ---------------------- 61 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 62 | You can modify how you receive notifications at My Workspace > Preferences. 63 | 64 | 65 | 66 | From louis@media.berkeley.edu Fri Jan 4 18:10:48 2008 67 | Return-Path: 68 | Received: from murder (mail.umich.edu [141.211.14.97]) 69 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 70 | Fri, 04 Jan 2008 18:10:48 -0500 71 | X-Sieve: CMU Sieve 2.3 72 | Received: from murder ([unix socket]) 73 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 74 | Fri, 04 Jan 2008 18:10:48 -0500 75 | Received: from icestorm.mr.itd.umich.edu (icestorm.mr.itd.umich.edu [141.211.93.149]) 76 | by sleepers.mail.umich.edu () with ESMTP id m04NAbGa029441; 77 | Fri, 4 Jan 2008 18:10:37 -0500 78 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 79 | BY icestorm.mr.itd.umich.edu ID 477EBCE3.161BB.4320 ; 80 | 4 Jan 2008 18:10:31 -0500 81 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 82 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 07969BB706; 83 | Fri, 4 Jan 2008 23:10:33 +0000 (GMT) 84 | Message-ID: <200801042308.m04N8v6O008125@nakamura.uits.iupui.edu> 85 | Mime-Version: 1.0 86 | Content-Transfer-Encoding: 7bit 87 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 88 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 710 89 | for ; 90 | Fri, 4 Jan 2008 23:10:10 +0000 (GMT) 91 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 92 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 4BA2F42F57 93 | for ; Fri, 4 Jan 2008 23:10:10 +0000 (GMT) 94 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 95 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04N8vHG008127 96 | for ; Fri, 4 Jan 2008 18:08:57 -0500 97 | Received: (from apache@localhost) 98 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04N8v6O008125 99 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 18:08:57 -0500 100 | Date: Fri, 4 Jan 2008 18:08:57 -0500 101 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to louis@media.berkeley.edu using -f 102 | To: source@collab.sakaiproject.org 103 | From: louis@media.berkeley.edu 104 | Subject: [sakai] svn commit: r39771 - in bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src: bundle java/org/sakaiproject/site/tool 105 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 106 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 107 | Content-Type: text/plain; charset=UTF-8 108 | X-DSPAM-Result: Innocent 109 | X-DSPAM-Processed: Fri Jan 4 18:10:48 2008 110 | X-DSPAM-Confidence: 0.6178 111 | X-DSPAM-Probability: 0.0000 112 | 113 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39771 114 | 115 | Author: louis@media.berkeley.edu 116 | Date: 2008-01-04 18:08:50 -0500 (Fri, 04 Jan 2008) 117 | New Revision: 39771 118 | 119 | Modified: 120 | bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src/bundle/sitesetupgeneric.properties 121 | bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java 122 | Log: 123 | BSP-1415 New (Guest) user Notification 124 | 125 | ---------------------- 126 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 127 | You can modify how you receive notifications at My Workspace > Preferences. 128 | 129 | 130 | 131 | From zqian@umich.edu Fri Jan 4 16:10:39 2008 132 | Return-Path: 133 | Received: from murder (mail.umich.edu [141.211.14.25]) 134 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 135 | Fri, 04 Jan 2008 16:10:39 -0500 136 | X-Sieve: CMU Sieve 2.3 137 | Received: from murder ([unix socket]) 138 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 139 | Fri, 04 Jan 2008 16:10:39 -0500 140 | Received: from ghostbusters.mr.itd.umich.edu (ghostbusters.mr.itd.umich.edu [141.211.93.144]) 141 | by panther.mail.umich.edu () with ESMTP id m04LAcZw014275; 142 | Fri, 4 Jan 2008 16:10:38 -0500 143 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 144 | BY ghostbusters.mr.itd.umich.edu ID 477EA0C6.A0214.25480 ; 145 | 4 Jan 2008 16:10:33 -0500 146 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 147 | by paploo.uhi.ac.uk (Postfix) with ESMTP id C48CDBB490; 148 | Fri, 4 Jan 2008 21:10:31 +0000 (GMT) 149 | Message-ID: <200801042109.m04L92hb007923@nakamura.uits.iupui.edu> 150 | Mime-Version: 1.0 151 | Content-Transfer-Encoding: 7bit 152 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 153 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 906 154 | for ; 155 | Fri, 4 Jan 2008 21:10:18 +0000 (GMT) 156 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 157 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 7D13042F71 158 | for ; Fri, 4 Jan 2008 21:10:14 +0000 (GMT) 159 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 160 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04L927E007925 161 | for ; Fri, 4 Jan 2008 16:09:02 -0500 162 | Received: (from apache@localhost) 163 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04L92hb007923 164 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 16:09:02 -0500 165 | Date: Fri, 4 Jan 2008 16:09:02 -0500 166 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to zqian@umich.edu using -f 167 | To: source@collab.sakaiproject.org 168 | From: zqian@umich.edu 169 | Subject: [sakai] svn commit: r39770 - site-manage/branches/sakai_2-5-x/site-manage-tool/tool/src/webapp/vm/sitesetup 170 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 171 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 172 | Content-Type: text/plain; charset=UTF-8 173 | X-DSPAM-Result: Innocent 174 | X-DSPAM-Processed: Fri Jan 4 16:10:39 2008 175 | X-DSPAM-Confidence: 0.6961 176 | X-DSPAM-Probability: 0.0000 177 | 178 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39770 179 | 180 | Author: zqian@umich.edu 181 | Date: 2008-01-04 16:09:01 -0500 (Fri, 04 Jan 2008) 182 | New Revision: 39770 183 | 184 | Modified: 185 | site-manage/branches/sakai_2-5-x/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-list.vm 186 | Log: 187 | merge fix to SAK-9996 into 2-5-x branch: svn merge -r 39687:39688 https://source.sakaiproject.org/svn/site-manage/trunk/ 188 | 189 | ---------------------- 190 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 191 | You can modify how you receive notifications at My Workspace > Preferences. 192 | 193 | 194 | 195 | From rjlowe@iupui.edu Fri Jan 4 15:46:24 2008 196 | Return-Path: 197 | Received: from murder (mail.umich.edu [141.211.14.25]) 198 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 199 | Fri, 04 Jan 2008 15:46:24 -0500 200 | X-Sieve: CMU Sieve 2.3 201 | Received: from murder ([unix socket]) 202 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 203 | Fri, 04 Jan 2008 15:46:24 -0500 204 | Received: from dreamcatcher.mr.itd.umich.edu (dreamcatcher.mr.itd.umich.edu [141.211.14.43]) 205 | by panther.mail.umich.edu () with ESMTP id m04KkNbx032077; 206 | Fri, 4 Jan 2008 15:46:23 -0500 207 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 208 | BY dreamcatcher.mr.itd.umich.edu ID 477E9B13.2F3BC.22965 ; 209 | 4 Jan 2008 15:46:13 -0500 210 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 211 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 4AE03BB552; 212 | Fri, 4 Jan 2008 20:46:13 +0000 (GMT) 213 | Message-ID: <200801042044.m04Kiem3007881@nakamura.uits.iupui.edu> 214 | Mime-Version: 1.0 215 | Content-Transfer-Encoding: 7bit 216 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 217 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 38 218 | for ; 219 | Fri, 4 Jan 2008 20:45:56 +0000 (GMT) 220 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 221 | by shmi.uhi.ac.uk (Postfix) with ESMTP id A55D242F57 222 | for ; Fri, 4 Jan 2008 20:45:52 +0000 (GMT) 223 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 224 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04KieqE007883 225 | for ; Fri, 4 Jan 2008 15:44:40 -0500 226 | Received: (from apache@localhost) 227 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04Kiem3007881 228 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 15:44:40 -0500 229 | Date: Fri, 4 Jan 2008 15:44:40 -0500 230 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to rjlowe@iupui.edu using -f 231 | To: source@collab.sakaiproject.org 232 | From: rjlowe@iupui.edu 233 | Subject: [sakai] svn commit: r39769 - in gradebook/trunk/app/ui/src: java/org/sakaiproject/tool/gradebook/ui/helpers/beans java/org/sakaiproject/tool/gradebook/ui/helpers/producers webapp/WEB-INF webapp/WEB-INF/bundle 234 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 235 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 236 | Content-Type: text/plain; charset=UTF-8 237 | X-DSPAM-Result: Innocent 238 | X-DSPAM-Processed: Fri Jan 4 15:46:24 2008 239 | X-DSPAM-Confidence: 0.7565 240 | X-DSPAM-Probability: 0.0000 241 | 242 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39769 243 | 244 | Author: rjlowe@iupui.edu 245 | Date: 2008-01-04 15:44:39 -0500 (Fri, 04 Jan 2008) 246 | New Revision: 39769 247 | 248 | Modified: 249 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/beans/AssignmentGradeRecordBean.java 250 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/producers/GradeGradebookItemProducer.java 251 | gradebook/trunk/app/ui/src/webapp/WEB-INF/applicationContext.xml 252 | gradebook/trunk/app/ui/src/webapp/WEB-INF/bundle/messages.properties 253 | gradebook/trunk/app/ui/src/webapp/WEB-INF/requestContext.xml 254 | Log: 255 | SAK-12180 - Fixed errors with grading helper 256 | 257 | ---------------------- 258 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 259 | You can modify how you receive notifications at My Workspace > Preferences. 260 | 261 | 262 | 263 | From zqian@umich.edu Fri Jan 4 15:03:18 2008 264 | Return-Path: 265 | Received: from murder (mail.umich.edu [141.211.14.46]) 266 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 267 | Fri, 04 Jan 2008 15:03:18 -0500 268 | X-Sieve: CMU Sieve 2.3 269 | Received: from murder ([unix socket]) 270 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 271 | Fri, 04 Jan 2008 15:03:18 -0500 272 | Received: from firestarter.mr.itd.umich.edu (firestarter.mr.itd.umich.edu [141.211.14.83]) 273 | by fan.mail.umich.edu () with ESMTP id m04K3HGF006563; 274 | Fri, 4 Jan 2008 15:03:17 -0500 275 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 276 | BY firestarter.mr.itd.umich.edu ID 477E9100.8F7F4.1590 ; 277 | 4 Jan 2008 15:03:15 -0500 278 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 279 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 57770BB477; 280 | Fri, 4 Jan 2008 20:03:09 +0000 (GMT) 281 | Message-ID: <200801042001.m04K1cO0007738@nakamura.uits.iupui.edu> 282 | Mime-Version: 1.0 283 | Content-Transfer-Encoding: 7bit 284 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 285 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 622 286 | for ; 287 | Fri, 4 Jan 2008 20:02:46 +0000 (GMT) 288 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 289 | by shmi.uhi.ac.uk (Postfix) with ESMTP id AB4D042F4D 290 | for ; Fri, 4 Jan 2008 20:02:50 +0000 (GMT) 291 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 292 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04K1cXv007740 293 | for ; Fri, 4 Jan 2008 15:01:38 -0500 294 | Received: (from apache@localhost) 295 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04K1cO0007738 296 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 15:01:38 -0500 297 | Date: Fri, 4 Jan 2008 15:01:38 -0500 298 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to zqian@umich.edu using -f 299 | To: source@collab.sakaiproject.org 300 | From: zqian@umich.edu 301 | Subject: [sakai] svn commit: r39766 - site-manage/branches/sakai_2-4-x/site-manage-tool/tool/src/java/org/sakaiproject/site/tool 302 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 303 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 304 | Content-Type: text/plain; charset=UTF-8 305 | X-DSPAM-Result: Innocent 306 | X-DSPAM-Processed: Fri Jan 4 15:03:18 2008 307 | X-DSPAM-Confidence: 0.7626 308 | X-DSPAM-Probability: 0.0000 309 | 310 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39766 311 | 312 | Author: zqian@umich.edu 313 | Date: 2008-01-04 15:01:37 -0500 (Fri, 04 Jan 2008) 314 | New Revision: 39766 315 | 316 | Modified: 317 | site-manage/branches/sakai_2-4-x/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java 318 | Log: 319 | merge fix to SAK-10788 into site-manage 2.4.x branch: 320 | 321 | Sakai Source Repository #38024 Wed Nov 07 14:54:46 MST 2007 zqian@umich.edu Fix to SAK-10788: If a provided id in a couse site is fake or doesn't provide any user information, Site Info appears to be like project site with empty participant list 322 | 323 | Watch for enrollments object being null and concatenate provider ids when there are more than one. 324 | Files Changed 325 | MODIFY /site-manage/trunk/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java 326 | 327 | 328 | 329 | 330 | ---------------------- 331 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 332 | You can modify how you receive notifications at My Workspace > Preferences. 333 | 334 | 335 | 336 | From rjlowe@iupui.edu Fri Jan 4 14:50:18 2008 337 | Return-Path: 338 | Received: from murder (mail.umich.edu [141.211.14.93]) 339 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 340 | Fri, 04 Jan 2008 14:50:18 -0500 341 | X-Sieve: CMU Sieve 2.3 342 | Received: from murder ([unix socket]) 343 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 344 | Fri, 04 Jan 2008 14:50:18 -0500 345 | Received: from eyewitness.mr.itd.umich.edu (eyewitness.mr.itd.umich.edu [141.211.93.142]) 346 | by mission.mail.umich.edu () with ESMTP id m04JoHJi019755; 347 | Fri, 4 Jan 2008 14:50:17 -0500 348 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 349 | BY eyewitness.mr.itd.umich.edu ID 477E8DF2.67B91.5278 ; 350 | 4 Jan 2008 14:50:13 -0500 351 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 352 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 2D1B9BB492; 353 | Fri, 4 Jan 2008 19:47:10 +0000 (GMT) 354 | Message-ID: <200801041948.m04JmdwO007705@nakamura.uits.iupui.edu> 355 | Mime-Version: 1.0 356 | Content-Transfer-Encoding: 7bit 357 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 358 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 960 359 | for ; 360 | Fri, 4 Jan 2008 19:46:50 +0000 (GMT) 361 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 362 | by shmi.uhi.ac.uk (Postfix) with ESMTP id B3E6742F4A 363 | for ; Fri, 4 Jan 2008 19:49:51 +0000 (GMT) 364 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 365 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04JmeV9007707 366 | for ; Fri, 4 Jan 2008 14:48:40 -0500 367 | Received: (from apache@localhost) 368 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04JmdwO007705 369 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 14:48:39 -0500 370 | Date: Fri, 4 Jan 2008 14:48:39 -0500 371 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to rjlowe@iupui.edu using -f 372 | To: source@collab.sakaiproject.org 373 | From: rjlowe@iupui.edu 374 | Subject: [sakai] svn commit: r39765 - in gradebook/trunk/app: business/src/java/org/sakaiproject/tool/gradebook/business business/src/java/org/sakaiproject/tool/gradebook/business/impl ui ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/beans ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/entity ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/params ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/producers ui/src/webapp/WEB-INF ui/src/webapp/WEB-INF/bundle ui/src/webapp/content/templates 375 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 376 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 377 | Content-Type: text/plain; charset=UTF-8 378 | X-DSPAM-Result: Innocent 379 | X-DSPAM-Processed: Fri Jan 4 14:50:18 2008 380 | X-DSPAM-Confidence: 0.7556 381 | X-DSPAM-Probability: 0.0000 382 | 383 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39765 384 | 385 | Author: rjlowe@iupui.edu 386 | Date: 2008-01-04 14:48:37 -0500 (Fri, 04 Jan 2008) 387 | New Revision: 39765 388 | 389 | Added: 390 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/beans/AssignmentGradeRecordBean.java 391 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/beans/AssignmentGradeRecordCreator.java 392 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/entity/GradebookEntryGradeEntityProvider.java 393 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/params/GradeGradebookItemViewParams.java 394 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/producers/GradeGradebookItemProducer.java 395 | gradebook/trunk/app/ui/src/webapp/content/templates/grade-gradebook-item.html 396 | Modified: 397 | gradebook/trunk/app/business/src/java/org/sakaiproject/tool/gradebook/business/GradebookManager.java 398 | gradebook/trunk/app/business/src/java/org/sakaiproject/tool/gradebook/business/impl/GradebookManagerHibernateImpl.java 399 | gradebook/trunk/app/ui/pom.xml 400 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/beans/GradebookItemBean.java 401 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/entity/GradebookEntryEntityProvider.java 402 | gradebook/trunk/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/helpers/producers/AddGradebookItemProducer.java 403 | gradebook/trunk/app/ui/src/webapp/WEB-INF/applicationContext.xml 404 | gradebook/trunk/app/ui/src/webapp/WEB-INF/bundle/messages.properties 405 | gradebook/trunk/app/ui/src/webapp/WEB-INF/requestContext.xml 406 | Log: 407 | SAK-12180 - New helper tool to grade an assignment 408 | 409 | ---------------------- 410 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 411 | You can modify how you receive notifications at My Workspace > Preferences. 412 | 413 | 414 | 415 | From cwen@iupui.edu Fri Jan 4 11:37:30 2008 416 | Return-Path: 417 | Received: from murder (mail.umich.edu [141.211.14.46]) 418 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 419 | Fri, 04 Jan 2008 11:37:30 -0500 420 | X-Sieve: CMU Sieve 2.3 421 | Received: from murder ([unix socket]) 422 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 423 | Fri, 04 Jan 2008 11:37:30 -0500 424 | Received: from tadpole.mr.itd.umich.edu (tadpole.mr.itd.umich.edu [141.211.14.72]) 425 | by fan.mail.umich.edu () with ESMTP id m04GbT9x022078; 426 | Fri, 4 Jan 2008 11:37:29 -0500 427 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 428 | BY tadpole.mr.itd.umich.edu ID 477E60B2.82756.9904 ; 429 | 4 Jan 2008 11:37:09 -0500 430 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 431 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 8D13DBB001; 432 | Fri, 4 Jan 2008 16:37:07 +0000 (GMT) 433 | Message-ID: <200801041635.m04GZQGZ007313@nakamura.uits.iupui.edu> 434 | Mime-Version: 1.0 435 | Content-Transfer-Encoding: 7bit 436 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 437 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 120 438 | for ; 439 | Fri, 4 Jan 2008 16:36:40 +0000 (GMT) 440 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 441 | by shmi.uhi.ac.uk (Postfix) with ESMTP id D430B42E42 442 | for ; Fri, 4 Jan 2008 16:36:37 +0000 (GMT) 443 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 444 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04GZQ7W007315 445 | for ; Fri, 4 Jan 2008 11:35:26 -0500 446 | Received: (from apache@localhost) 447 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04GZQGZ007313 448 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 11:35:26 -0500 449 | Date: Fri, 4 Jan 2008 11:35:26 -0500 450 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to cwen@iupui.edu using -f 451 | To: source@collab.sakaiproject.org 452 | From: cwen@iupui.edu 453 | Subject: [sakai] svn commit: r39764 - in msgcntr/trunk/messageforums-app/src/java/org/sakaiproject/tool/messageforums: . ui 454 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 455 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 456 | Content-Type: text/plain; charset=UTF-8 457 | X-DSPAM-Result: Innocent 458 | X-DSPAM-Processed: Fri Jan 4 11:37:30 2008 459 | X-DSPAM-Confidence: 0.7002 460 | X-DSPAM-Probability: 0.0000 461 | 462 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39764 463 | 464 | Author: cwen@iupui.edu 465 | Date: 2008-01-04 11:35:25 -0500 (Fri, 04 Jan 2008) 466 | New Revision: 39764 467 | 468 | Modified: 469 | msgcntr/trunk/messageforums-app/src/java/org/sakaiproject/tool/messageforums/PrivateMessagesTool.java 470 | msgcntr/trunk/messageforums-app/src/java/org/sakaiproject/tool/messageforums/ui/PrivateMessageDecoratedBean.java 471 | Log: 472 | unmerge Xingtang's checkin for SAK-12488. 473 | 474 | svn merge -r39558:39557 https://source.sakaiproject.org/svn/msgcntr/trunk 475 | U messageforums-app/src/java/org/sakaiproject/tool/messageforums/PrivateMessagesTool.java 476 | U messageforums-app/src/java/org/sakaiproject/tool/messageforums/ui/PrivateMessageDecoratedBean.java 477 | 478 | svn log -r 39558 479 | ------------------------------------------------------------------------ 480 | r39558 | hu2@iupui.edu | 2007-12-20 15:25:38 -0500 (Thu, 20 Dec 2007) | 3 lines 481 | 482 | SAK-12488 483 | when send a message to yourself. click reply to all, cc row should be null. 484 | http://jira.sakaiproject.org/jira/browse/SAK-12488 485 | ------------------------------------------------------------------------ 486 | 487 | 488 | ---------------------- 489 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 490 | You can modify how you receive notifications at My Workspace > Preferences. 491 | 492 | 493 | 494 | From cwen@iupui.edu Fri Jan 4 11:35:08 2008 495 | Return-Path: 496 | Received: from murder (mail.umich.edu [141.211.14.46]) 497 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 498 | Fri, 04 Jan 2008 11:35:08 -0500 499 | X-Sieve: CMU Sieve 2.3 500 | Received: from murder ([unix socket]) 501 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 502 | Fri, 04 Jan 2008 11:35:08 -0500 503 | Received: from it.mr.itd.umich.edu (it.mr.itd.umich.edu [141.211.93.151]) 504 | by fan.mail.umich.edu () with ESMTP id m04GZ6lt020480; 505 | Fri, 4 Jan 2008 11:35:06 -0500 506 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 507 | BY it.mr.itd.umich.edu ID 477E6033.6469D.21870 ; 508 | 4 Jan 2008 11:35:02 -0500 509 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 510 | by paploo.uhi.ac.uk (Postfix) with ESMTP id E40FABAE5B; 511 | Fri, 4 Jan 2008 16:34:38 +0000 (GMT) 512 | Message-ID: <200801041633.m04GX6eG007292@nakamura.uits.iupui.edu> 513 | Mime-Version: 1.0 514 | Content-Transfer-Encoding: 7bit 515 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 516 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 697 517 | for ; 518 | Fri, 4 Jan 2008 16:34:01 +0000 (GMT) 519 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 520 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 1CD0C42E42 521 | for ; Fri, 4 Jan 2008 16:34:17 +0000 (GMT) 522 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 523 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04GX6Y3007294 524 | for ; Fri, 4 Jan 2008 11:33:06 -0500 525 | Received: (from apache@localhost) 526 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04GX6eG007292 527 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 11:33:06 -0500 528 | Date: Fri, 4 Jan 2008 11:33:06 -0500 529 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to cwen@iupui.edu using -f 530 | To: source@collab.sakaiproject.org 531 | From: cwen@iupui.edu 532 | Subject: [sakai] svn commit: r39763 - in msgcntr/trunk: messageforums-api/src/bundle/org/sakaiproject/api/app/messagecenter/bundle messageforums-app/src/java/org/sakaiproject/tool/messageforums 533 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 534 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 535 | Content-Type: text/plain; charset=UTF-8 536 | X-DSPAM-Result: Innocent 537 | X-DSPAM-Processed: Fri Jan 4 11:35:08 2008 538 | X-DSPAM-Confidence: 0.7615 539 | X-DSPAM-Probability: 0.0000 540 | 541 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39763 542 | 543 | Author: cwen@iupui.edu 544 | Date: 2008-01-04 11:33:05 -0500 (Fri, 04 Jan 2008) 545 | New Revision: 39763 546 | 547 | Modified: 548 | msgcntr/trunk/messageforums-api/src/bundle/org/sakaiproject/api/app/messagecenter/bundle/Messages.properties 549 | msgcntr/trunk/messageforums-app/src/java/org/sakaiproject/tool/messageforums/PrivateMessagesTool.java 550 | Log: 551 | unmerge Xingtang's check in for SAK-12484. 552 | 553 | svn merge -r39571:39570 https://source.sakaiproject.org/svn/msgcntr/trunk 554 | U messageforums-api/src/bundle/org/sakaiproject/api/app/messagecenter/bundle/Messages.properties 555 | U messageforums-app/src/java/org/sakaiproject/tool/messageforums/PrivateMessagesTool.java 556 | 557 | svn log -r 39571 558 | ------------------------------------------------------------------------ 559 | r39571 | hu2@iupui.edu | 2007-12-20 21:26:28 -0500 (Thu, 20 Dec 2007) | 3 lines 560 | 561 | SAK-12484 562 | reply all cc list should not include the current user name. 563 | http://jira.sakaiproject.org/jira/browse/SAK-12484 564 | ------------------------------------------------------------------------ 565 | 566 | 567 | ---------------------- 568 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 569 | You can modify how you receive notifications at My Workspace > Preferences. 570 | 571 | 572 | 573 | From gsilver@umich.edu Fri Jan 4 11:12:37 2008 574 | Return-Path: 575 | Received: from murder (mail.umich.edu [141.211.14.25]) 576 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 577 | Fri, 04 Jan 2008 11:12:37 -0500 578 | X-Sieve: CMU Sieve 2.3 579 | Received: from murder ([unix socket]) 580 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 581 | Fri, 04 Jan 2008 11:12:37 -0500 582 | Received: from holes.mr.itd.umich.edu (holes.mr.itd.umich.edu [141.211.14.79]) 583 | by panther.mail.umich.edu () with ESMTP id m04GCaHB030887; 584 | Fri, 4 Jan 2008 11:12:36 -0500 585 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 586 | BY holes.mr.itd.umich.edu ID 477E5AEB.E670B.28397 ; 587 | 4 Jan 2008 11:12:30 -0500 588 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 589 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 99715BAE7D; 590 | Fri, 4 Jan 2008 16:12:27 +0000 (GMT) 591 | Message-ID: <200801041611.m04GB1Lb007221@nakamura.uits.iupui.edu> 592 | Mime-Version: 1.0 593 | Content-Transfer-Encoding: 7bit 594 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 595 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 272 596 | for ; 597 | Fri, 4 Jan 2008 16:12:14 +0000 (GMT) 598 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 599 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 0A6ED42DFC 600 | for ; Fri, 4 Jan 2008 16:12:12 +0000 (GMT) 601 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 602 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04GB1Wt007223 603 | for ; Fri, 4 Jan 2008 11:11:01 -0500 604 | Received: (from apache@localhost) 605 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04GB1Lb007221 606 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 11:11:01 -0500 607 | Date: Fri, 4 Jan 2008 11:11:01 -0500 608 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to gsilver@umich.edu using -f 609 | To: source@collab.sakaiproject.org 610 | From: gsilver@umich.edu 611 | Subject: [sakai] svn commit: r39762 - web/trunk/web-tool/tool/src/bundle 612 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 613 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 614 | Content-Type: text/plain; charset=UTF-8 615 | X-DSPAM-Result: Innocent 616 | X-DSPAM-Processed: Fri Jan 4 11:12:37 2008 617 | X-DSPAM-Confidence: 0.7601 618 | X-DSPAM-Probability: 0.0000 619 | 620 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39762 621 | 622 | Author: gsilver@umich.edu 623 | Date: 2008-01-04 11:11:00 -0500 (Fri, 04 Jan 2008) 624 | New Revision: 39762 625 | 626 | Modified: 627 | web/trunk/web-tool/tool/src/bundle/iframe.properties 628 | Log: 629 | SAK-12596 630 | http://bugs.sakaiproject.org/jira/browse/SAK-12596 631 | - left moot (unused) entries commented for now 632 | 633 | ---------------------- 634 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 635 | You can modify how you receive notifications at My Workspace > Preferences. 636 | 637 | 638 | 639 | From gsilver@umich.edu Fri Jan 4 11:11:52 2008 640 | Return-Path: 641 | Received: from murder (mail.umich.edu [141.211.14.36]) 642 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 643 | Fri, 04 Jan 2008 11:11:52 -0500 644 | X-Sieve: CMU Sieve 2.3 645 | Received: from murder ([unix socket]) 646 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 647 | Fri, 04 Jan 2008 11:11:52 -0500 648 | Received: from creepshow.mr.itd.umich.edu (creepshow.mr.itd.umich.edu [141.211.14.84]) 649 | by godsend.mail.umich.edu () with ESMTP id m04GBqqv025330; 650 | Fri, 4 Jan 2008 11:11:52 -0500 651 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 652 | BY creepshow.mr.itd.umich.edu ID 477E5AB3.5CC32.30840 ; 653 | 4 Jan 2008 11:11:34 -0500 654 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 655 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 62AA4BAE46; 656 | Fri, 4 Jan 2008 16:11:31 +0000 (GMT) 657 | Message-ID: <200801041610.m04GA5KP007209@nakamura.uits.iupui.edu> 658 | Mime-Version: 1.0 659 | Content-Transfer-Encoding: 7bit 660 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 661 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 1006 662 | for ; 663 | Fri, 4 Jan 2008 16:11:18 +0000 (GMT) 664 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 665 | by shmi.uhi.ac.uk (Postfix) with ESMTP id C596A3DFA2 666 | for ; Fri, 4 Jan 2008 16:11:16 +0000 (GMT) 667 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 668 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04GA5LR007211 669 | for ; Fri, 4 Jan 2008 11:10:05 -0500 670 | Received: (from apache@localhost) 671 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04GA5KP007209 672 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 11:10:05 -0500 673 | Date: Fri, 4 Jan 2008 11:10:05 -0500 674 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to gsilver@umich.edu using -f 675 | To: source@collab.sakaiproject.org 676 | From: gsilver@umich.edu 677 | Subject: [sakai] svn commit: r39761 - site/trunk/site-tool/tool/src/bundle 678 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 679 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 680 | Content-Type: text/plain; charset=UTF-8 681 | X-DSPAM-Result: Innocent 682 | X-DSPAM-Processed: Fri Jan 4 11:11:52 2008 683 | X-DSPAM-Confidence: 0.7605 684 | X-DSPAM-Probability: 0.0000 685 | 686 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39761 687 | 688 | Author: gsilver@umich.edu 689 | Date: 2008-01-04 11:10:04 -0500 (Fri, 04 Jan 2008) 690 | New Revision: 39761 691 | 692 | Modified: 693 | site/trunk/site-tool/tool/src/bundle/admin.properties 694 | Log: 695 | SAK-12595 696 | http://bugs.sakaiproject.org/jira/browse/SAK-12595 697 | - left moot (unused) entries commented for now 698 | 699 | ---------------------- 700 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 701 | You can modify how you receive notifications at My Workspace > Preferences. 702 | 703 | 704 | 705 | From zqian@umich.edu Fri Jan 4 11:11:03 2008 706 | Return-Path: 707 | Received: from murder (mail.umich.edu [141.211.14.97]) 708 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 709 | Fri, 04 Jan 2008 11:11:03 -0500 710 | X-Sieve: CMU Sieve 2.3 711 | Received: from murder ([unix socket]) 712 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 713 | Fri, 04 Jan 2008 11:11:03 -0500 714 | Received: from carrie.mr.itd.umich.edu (carrie.mr.itd.umich.edu [141.211.93.152]) 715 | by sleepers.mail.umich.edu () with ESMTP id m04GB3Vg011502; 716 | Fri, 4 Jan 2008 11:11:03 -0500 717 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 718 | BY carrie.mr.itd.umich.edu ID 477E5A8D.B378F.24200 ; 719 | 4 Jan 2008 11:10:56 -0500 720 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 721 | by paploo.uhi.ac.uk (Postfix) with ESMTP id C7251BAD44; 722 | Fri, 4 Jan 2008 16:10:53 +0000 (GMT) 723 | Message-ID: <200801041609.m04G9EuX007197@nakamura.uits.iupui.edu> 724 | Mime-Version: 1.0 725 | Content-Transfer-Encoding: 7bit 726 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 727 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 483 728 | for ; 729 | Fri, 4 Jan 2008 16:10:27 +0000 (GMT) 730 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 731 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 2E7043DFA2 732 | for ; Fri, 4 Jan 2008 16:10:26 +0000 (GMT) 733 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 734 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04G9Eqg007199 735 | for ; Fri, 4 Jan 2008 11:09:15 -0500 736 | Received: (from apache@localhost) 737 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04G9EuX007197 738 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 11:09:14 -0500 739 | Date: Fri, 4 Jan 2008 11:09:14 -0500 740 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to zqian@umich.edu using -f 741 | To: source@collab.sakaiproject.org 742 | From: zqian@umich.edu 743 | Subject: [sakai] svn commit: r39760 - in site-manage/trunk/site-manage-tool/tool/src: java/org/sakaiproject/site/tool webapp/vm/sitesetup 744 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 745 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 746 | Content-Type: text/plain; charset=UTF-8 747 | X-DSPAM-Result: Innocent 748 | X-DSPAM-Processed: Fri Jan 4 11:11:03 2008 749 | X-DSPAM-Confidence: 0.6959 750 | X-DSPAM-Probability: 0.0000 751 | 752 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39760 753 | 754 | Author: zqian@umich.edu 755 | Date: 2008-01-04 11:09:12 -0500 (Fri, 04 Jan 2008) 756 | New Revision: 39760 757 | 758 | Modified: 759 | site-manage/trunk/site-manage-tool/tool/src/java/org/sakaiproject/site/tool/SiteAction.java 760 | site-manage/trunk/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-list.vm 761 | Log: 762 | fix to SAK-10911: Refactor use of site.upd, site.upd.site.mbrship and site.upd.grp.mbrship permissions 763 | 764 | ---------------------- 765 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 766 | You can modify how you receive notifications at My Workspace > Preferences. 767 | 768 | 769 | 770 | From gsilver@umich.edu Fri Jan 4 11:10:22 2008 771 | Return-Path: 772 | Received: from murder (mail.umich.edu [141.211.14.39]) 773 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 774 | Fri, 04 Jan 2008 11:10:22 -0500 775 | X-Sieve: CMU Sieve 2.3 776 | Received: from murder ([unix socket]) 777 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 778 | Fri, 04 Jan 2008 11:10:22 -0500 779 | Received: from holes.mr.itd.umich.edu (holes.mr.itd.umich.edu [141.211.14.79]) 780 | by faithful.mail.umich.edu () with ESMTP id m04GAL9k010604; 781 | Fri, 4 Jan 2008 11:10:21 -0500 782 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 783 | BY holes.mr.itd.umich.edu ID 477E5A67.34350.23015 ; 784 | 4 Jan 2008 11:10:18 -0500 785 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 786 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 98D04BAD43; 787 | Fri, 4 Jan 2008 16:10:11 +0000 (GMT) 788 | Message-ID: <200801041608.m04G8d7w007184@nakamura.uits.iupui.edu> 789 | Mime-Version: 1.0 790 | Content-Transfer-Encoding: 7bit 791 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 792 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 966 793 | for ; 794 | Fri, 4 Jan 2008 16:09:51 +0000 (GMT) 795 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 796 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 9F89542DD0 797 | for ; Fri, 4 Jan 2008 16:09:50 +0000 (GMT) 798 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 799 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04G8dXN007186 800 | for ; Fri, 4 Jan 2008 11:08:39 -0500 801 | Received: (from apache@localhost) 802 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04G8d7w007184 803 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 11:08:39 -0500 804 | Date: Fri, 4 Jan 2008 11:08:39 -0500 805 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to gsilver@umich.edu using -f 806 | To: source@collab.sakaiproject.org 807 | From: gsilver@umich.edu 808 | Subject: [sakai] svn commit: r39759 - mailarchive/trunk/mailarchive-tool/tool/src/bundle 809 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 810 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 811 | Content-Type: text/plain; charset=UTF-8 812 | X-DSPAM-Result: Innocent 813 | X-DSPAM-Processed: Fri Jan 4 11:10:22 2008 814 | X-DSPAM-Confidence: 0.7606 815 | X-DSPAM-Probability: 0.0000 816 | 817 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39759 818 | 819 | Author: gsilver@umich.edu 820 | Date: 2008-01-04 11:08:38 -0500 (Fri, 04 Jan 2008) 821 | New Revision: 39759 822 | 823 | Modified: 824 | mailarchive/trunk/mailarchive-tool/tool/src/bundle/email.properties 825 | Log: 826 | SAK-12592 827 | http://bugs.sakaiproject.org/jira/browse/SAK-12592 828 | - left moot (unused) entries commented for now 829 | 830 | ---------------------- 831 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 832 | You can modify how you receive notifications at My Workspace > Preferences. 833 | 834 | 835 | 836 | From wagnermr@iupui.edu Fri Jan 4 10:38:42 2008 837 | Return-Path: 838 | Received: from murder (mail.umich.edu [141.211.14.90]) 839 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 840 | Fri, 04 Jan 2008 10:38:42 -0500 841 | X-Sieve: CMU Sieve 2.3 842 | Received: from murder ([unix socket]) 843 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 844 | Fri, 04 Jan 2008 10:38:42 -0500 845 | Received: from shining.mr.itd.umich.edu (shining.mr.itd.umich.edu [141.211.93.153]) 846 | by flawless.mail.umich.edu () with ESMTP id m04Fcfjm012313; 847 | Fri, 4 Jan 2008 10:38:41 -0500 848 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 849 | BY shining.mr.itd.umich.edu ID 477E52FA.E6C6E.24093 ; 850 | 4 Jan 2008 10:38:37 -0500 851 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 852 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 6A39594CD2; 853 | Fri, 4 Jan 2008 15:37:36 +0000 (GMT) 854 | Message-ID: <200801041537.m04Fb6Ci007092@nakamura.uits.iupui.edu> 855 | Mime-Version: 1.0 856 | Content-Transfer-Encoding: 7bit 857 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 858 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 690 859 | for ; 860 | Fri, 4 Jan 2008 15:37:21 +0000 (GMT) 861 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 862 | by shmi.uhi.ac.uk (Postfix) with ESMTP id CEFA037ACE 863 | for ; Fri, 4 Jan 2008 15:38:17 +0000 (GMT) 864 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 865 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04Fb6nh007094 866 | for ; Fri, 4 Jan 2008 10:37:06 -0500 867 | Received: (from apache@localhost) 868 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04Fb6Ci007092 869 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 10:37:06 -0500 870 | Date: Fri, 4 Jan 2008 10:37:06 -0500 871 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to wagnermr@iupui.edu using -f 872 | To: source@collab.sakaiproject.org 873 | From: wagnermr@iupui.edu 874 | Subject: [sakai] svn commit: r39758 - in gradebook/trunk: app/business/src/java/org/sakaiproject/tool/gradebook/business/impl service/api/src/java/org/sakaiproject/service/gradebook/shared service/impl/src/java/org/sakaiproject/component/gradebook 875 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 876 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 877 | Content-Type: text/plain; charset=UTF-8 878 | X-DSPAM-Result: Innocent 879 | X-DSPAM-Processed: Fri Jan 4 10:38:42 2008 880 | X-DSPAM-Confidence: 0.7559 881 | X-DSPAM-Probability: 0.0000 882 | 883 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39758 884 | 885 | Author: wagnermr@iupui.edu 886 | Date: 2008-01-04 10:37:04 -0500 (Fri, 04 Jan 2008) 887 | New Revision: 39758 888 | 889 | Modified: 890 | gradebook/trunk/app/business/src/java/org/sakaiproject/tool/gradebook/business/impl/GradebookManagerHibernateImpl.java 891 | gradebook/trunk/service/api/src/java/org/sakaiproject/service/gradebook/shared/GradebookService.java 892 | gradebook/trunk/service/impl/src/java/org/sakaiproject/component/gradebook/GradebookServiceHibernateImpl.java 893 | Log: 894 | SAK-12175 895 | http://bugs.sakaiproject.org/jira/browse/SAK-12175 896 | Create methods required for gb integration with the Assignment2 tool 897 | getGradeDefinitionForStudentForItem 898 | 899 | ---------------------- 900 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 901 | You can modify how you receive notifications at My Workspace > Preferences. 902 | 903 | 904 | 905 | From zqian@umich.edu Fri Jan 4 10:17:43 2008 906 | Return-Path: 907 | Received: from murder (mail.umich.edu [141.211.14.97]) 908 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 909 | Fri, 04 Jan 2008 10:17:43 -0500 910 | X-Sieve: CMU Sieve 2.3 911 | Received: from murder ([unix socket]) 912 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 913 | Fri, 04 Jan 2008 10:17:42 -0500 914 | Received: from creepshow.mr.itd.umich.edu (creepshow.mr.itd.umich.edu [141.211.14.84]) 915 | by sleepers.mail.umich.edu () with ESMTP id m04FHgfs011536; 916 | Fri, 4 Jan 2008 10:17:42 -0500 917 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 918 | BY creepshow.mr.itd.umich.edu ID 477E4E0F.CCA4B.926 ; 919 | 4 Jan 2008 10:17:38 -0500 920 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 921 | by paploo.uhi.ac.uk (Postfix) with ESMTP id BD02DBAC64; 922 | Fri, 4 Jan 2008 15:17:34 +0000 (GMT) 923 | Message-ID: <200801041515.m04FFv42007050@nakamura.uits.iupui.edu> 924 | Mime-Version: 1.0 925 | Content-Transfer-Encoding: 7bit 926 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 927 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 25 928 | for ; 929 | Fri, 4 Jan 2008 15:17:11 +0000 (GMT) 930 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 931 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 5B396236B9 932 | for ; Fri, 4 Jan 2008 15:17:08 +0000 (GMT) 933 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 934 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04FFv85007052 935 | for ; Fri, 4 Jan 2008 10:15:57 -0500 936 | Received: (from apache@localhost) 937 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04FFv42007050 938 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 10:15:57 -0500 939 | Date: Fri, 4 Jan 2008 10:15:57 -0500 940 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to zqian@umich.edu using -f 941 | To: source@collab.sakaiproject.org 942 | From: zqian@umich.edu 943 | Subject: [sakai] svn commit: r39757 - in assignment/trunk: assignment-impl/impl/src/java/org/sakaiproject/assignment/impl assignment-tool/tool/src/webapp/vm/assignment 944 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 945 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 946 | Content-Type: text/plain; charset=UTF-8 947 | X-DSPAM-Result: Innocent 948 | X-DSPAM-Processed: Fri Jan 4 10:17:42 2008 949 | X-DSPAM-Confidence: 0.7605 950 | X-DSPAM-Probability: 0.0000 951 | 952 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39757 953 | 954 | Author: zqian@umich.edu 955 | Date: 2008-01-04 10:15:54 -0500 (Fri, 04 Jan 2008) 956 | New Revision: 39757 957 | 958 | Modified: 959 | assignment/trunk/assignment-impl/impl/src/java/org/sakaiproject/assignment/impl/BaseAssignmentService.java 960 | assignment/trunk/assignment-tool/tool/src/webapp/vm/assignment/chef_assignments_instructor_list_submissions.vm 961 | Log: 962 | fix to SAK-12604:Don't show groups/sections filter if the site doesn't have any 963 | 964 | ---------------------- 965 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 966 | You can modify how you receive notifications at My Workspace > Preferences. 967 | 968 | 969 | 970 | From antranig@caret.cam.ac.uk Fri Jan 4 10:04:14 2008 971 | Return-Path: 972 | Received: from murder (mail.umich.edu [141.211.14.25]) 973 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 974 | Fri, 04 Jan 2008 10:04:14 -0500 975 | X-Sieve: CMU Sieve 2.3 976 | Received: from murder ([unix socket]) 977 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 978 | Fri, 04 Jan 2008 10:04:14 -0500 979 | Received: from holes.mr.itd.umich.edu (holes.mr.itd.umich.edu [141.211.14.79]) 980 | by panther.mail.umich.edu () with ESMTP id m04F4Dci015108; 981 | Fri, 4 Jan 2008 10:04:13 -0500 982 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 983 | BY holes.mr.itd.umich.edu ID 477E4AE3.D7AF.31669 ; 984 | 4 Jan 2008 10:04:05 -0500 985 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 986 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 933E3BAC17; 987 | Fri, 4 Jan 2008 15:04:00 +0000 (GMT) 988 | Message-ID: <200801041502.m04F21Jo007031@nakamura.uits.iupui.edu> 989 | Mime-Version: 1.0 990 | Content-Transfer-Encoding: 7bit 991 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 992 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 32 993 | for ; 994 | Fri, 4 Jan 2008 15:03:15 +0000 (GMT) 995 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 996 | by shmi.uhi.ac.uk (Postfix) with ESMTP id AC2F6236B9 997 | for ; Fri, 4 Jan 2008 15:03:12 +0000 (GMT) 998 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 999 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04F21hn007033 1000 | for ; Fri, 4 Jan 2008 10:02:01 -0500 1001 | Received: (from apache@localhost) 1002 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04F21Jo007031 1003 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 10:02:01 -0500 1004 | Date: Fri, 4 Jan 2008 10:02:01 -0500 1005 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to antranig@caret.cam.ac.uk using -f 1006 | To: source@collab.sakaiproject.org 1007 | From: antranig@caret.cam.ac.uk 1008 | Subject: [sakai] svn commit: r39756 - in component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component: impl impl/spring/support impl/spring/support/dynamic impl/support util 1009 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1010 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1011 | Content-Type: text/plain; charset=UTF-8 1012 | X-DSPAM-Result: Innocent 1013 | X-DSPAM-Processed: Fri Jan 4 10:04:14 2008 1014 | X-DSPAM-Confidence: 0.6932 1015 | X-DSPAM-Probability: 0.0000 1016 | 1017 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39756 1018 | 1019 | Author: antranig@caret.cam.ac.uk 1020 | Date: 2008-01-04 10:01:40 -0500 (Fri, 04 Jan 2008) 1021 | New Revision: 39756 1022 | 1023 | Added: 1024 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/impl/spring/support/dynamic/ 1025 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/impl/spring/support/dynamic/DynamicComponentManager.java 1026 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/impl/support/ 1027 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/impl/support/DynamicComponentRecord.java 1028 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/impl/support/DynamicJARManager.java 1029 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/impl/support/JARRecord.java 1030 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/util/ByteToCharBase64.java 1031 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/util/FileUtil.java 1032 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/util/RecordFileIO.java 1033 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/util/RecordReader.java 1034 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/util/RecordWriter.java 1035 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/util/StreamDigestor.java 1036 | Modified: 1037 | component/branches/SAK-12166/component-api/component/src/java/org/sakaiproject/component/impl/spring/support/ComponentsLoaderImpl.java 1038 | Log: 1039 | Temporary commit of incomplete work on JAR caching 1040 | 1041 | ---------------------- 1042 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1043 | You can modify how you receive notifications at My Workspace > Preferences. 1044 | 1045 | 1046 | 1047 | From gopal.ramasammycook@gmail.com Fri Jan 4 09:05:31 2008 1048 | Return-Path: 1049 | Received: from murder (mail.umich.edu [141.211.14.90]) 1050 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1051 | Fri, 04 Jan 2008 09:05:31 -0500 1052 | X-Sieve: CMU Sieve 2.3 1053 | Received: from murder ([unix socket]) 1054 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1055 | Fri, 04 Jan 2008 09:05:31 -0500 1056 | Received: from guys.mr.itd.umich.edu (guys.mr.itd.umich.edu [141.211.14.76]) 1057 | by flawless.mail.umich.edu () with ESMTP id m04E5U3C029277; 1058 | Fri, 4 Jan 2008 09:05:30 -0500 1059 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1060 | BY guys.mr.itd.umich.edu ID 477E3D23.EE2E7.5237 ; 1061 | 4 Jan 2008 09:05:26 -0500 1062 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1063 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 33C7856DC0; 1064 | Fri, 4 Jan 2008 14:05:26 +0000 (GMT) 1065 | Message-ID: <200801041403.m04E3psW006926@nakamura.uits.iupui.edu> 1066 | Mime-Version: 1.0 1067 | Content-Transfer-Encoding: 7bit 1068 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1069 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 575 1070 | for ; 1071 | Fri, 4 Jan 2008 14:05:04 +0000 (GMT) 1072 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1073 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 3C0261D617 1074 | for ; Fri, 4 Jan 2008 14:05:03 +0000 (GMT) 1075 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1076 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04E3pQS006928 1077 | for ; Fri, 4 Jan 2008 09:03:52 -0500 1078 | Received: (from apache@localhost) 1079 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04E3psW006926 1080 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 09:03:51 -0500 1081 | Date: Fri, 4 Jan 2008 09:03:51 -0500 1082 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to gopal.ramasammycook@gmail.com using -f 1083 | To: source@collab.sakaiproject.org 1084 | From: gopal.ramasammycook@gmail.com 1085 | Subject: [sakai] svn commit: r39755 - in sam/branches/SAK-12065: samigo-api/src/java/org/sakaiproject/tool/assessment/shared/api/grading samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/evaluation samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/evaluation samigo-services/src/java/org/sakaiproject/tool/assessment/facade samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/ifc samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/integrated samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/standalone samigo-services/src/java/org/sakaiproject/tool/assessment/shared/impl/grading 1086 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1087 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1088 | Content-Type: text/plain; charset=UTF-8 1089 | X-DSPAM-Result: Innocent 1090 | X-DSPAM-Processed: Fri Jan 4 09:05:31 2008 1091 | X-DSPAM-Confidence: 0.7558 1092 | X-DSPAM-Probability: 0.0000 1093 | 1094 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39755 1095 | 1096 | Author: gopal.ramasammycook@gmail.com 1097 | Date: 2008-01-04 09:02:54 -0500 (Fri, 04 Jan 2008) 1098 | New Revision: 39755 1099 | 1100 | Modified: 1101 | sam/branches/SAK-12065/samigo-api/src/java/org/sakaiproject/tool/assessment/shared/api/grading/GradingSectionAwareServiceAPI.java 1102 | sam/branches/SAK-12065/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/evaluation/QuestionScoresBean.java 1103 | sam/branches/SAK-12065/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/evaluation/SubmissionStatusBean.java 1104 | sam/branches/SAK-12065/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/bean/evaluation/TotalScoresBean.java 1105 | sam/branches/SAK-12065/samigo-app/src/java/org/sakaiproject/tool/assessment/ui/listener/evaluation/SubmissionStatusListener.java 1106 | sam/branches/SAK-12065/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueries.java 1107 | sam/branches/SAK-12065/samigo-services/src/java/org/sakaiproject/tool/assessment/facade/PublishedAssessmentFacadeQueriesAPI.java 1108 | sam/branches/SAK-12065/samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/ifc/SectionAwareServiceHelper.java 1109 | sam/branches/SAK-12065/samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/integrated/SectionAwareServiceHelperImpl.java 1110 | sam/branches/SAK-12065/samigo-services/src/java/org/sakaiproject/tool/assessment/integration/helper/standalone/SectionAwareServiceHelperImpl.java 1111 | sam/branches/SAK-12065/samigo-services/src/java/org/sakaiproject/tool/assessment/shared/impl/grading/GradingSectionAwareServiceImpl.java 1112 | Log: 1113 | SAK-12065 Gopal - Samigo Group Release. SubmissionStatus/TotalScores/Questions View filter. 1114 | 1115 | ---------------------- 1116 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1117 | You can modify how you receive notifications at My Workspace > Preferences. 1118 | 1119 | 1120 | 1121 | From david.horwitz@uct.ac.za Fri Jan 4 07:02:32 2008 1122 | Return-Path: 1123 | Received: from murder (mail.umich.edu [141.211.14.39]) 1124 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1125 | Fri, 04 Jan 2008 07:02:32 -0500 1126 | X-Sieve: CMU Sieve 2.3 1127 | Received: from murder ([unix socket]) 1128 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1129 | Fri, 04 Jan 2008 07:02:32 -0500 1130 | Received: from guys.mr.itd.umich.edu (guys.mr.itd.umich.edu [141.211.14.76]) 1131 | by faithful.mail.umich.edu () with ESMTP id m04C2VN7026678; 1132 | Fri, 4 Jan 2008 07:02:31 -0500 1133 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1134 | BY guys.mr.itd.umich.edu ID 477E2050.C2599.3263 ; 1135 | 4 Jan 2008 07:02:27 -0500 1136 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1137 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 6497FBA906; 1138 | Fri, 4 Jan 2008 12:02:11 +0000 (GMT) 1139 | Message-ID: <200801041200.m04C0gfK006793@nakamura.uits.iupui.edu> 1140 | Mime-Version: 1.0 1141 | Content-Transfer-Encoding: 7bit 1142 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1143 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 611 1144 | for ; 1145 | Fri, 4 Jan 2008 12:01:53 +0000 (GMT) 1146 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1147 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 5296342D3C 1148 | for ; Fri, 4 Jan 2008 12:01:53 +0000 (GMT) 1149 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1150 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04C0gnm006795 1151 | for ; Fri, 4 Jan 2008 07:00:42 -0500 1152 | Received: (from apache@localhost) 1153 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04C0gfK006793 1154 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 07:00:42 -0500 1155 | Date: Fri, 4 Jan 2008 07:00:42 -0500 1156 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to david.horwitz@uct.ac.za using -f 1157 | To: source@collab.sakaiproject.org 1158 | From: david.horwitz@uct.ac.za 1159 | Subject: [sakai] svn commit: r39754 - in polls/branches/sakai_2-5-x: . tool tool/src/java/org/sakaiproject/poll/tool tool/src/java/org/sakaiproject/poll/tool/evolvers tool/src/webapp/WEB-INF 1160 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1161 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1162 | Content-Type: text/plain; charset=UTF-8 1163 | X-DSPAM-Result: Innocent 1164 | X-DSPAM-Processed: Fri Jan 4 07:02:32 2008 1165 | X-DSPAM-Confidence: 0.6526 1166 | X-DSPAM-Probability: 0.0000 1167 | 1168 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39754 1169 | 1170 | Author: david.horwitz@uct.ac.za 1171 | Date: 2008-01-04 07:00:10 -0500 (Fri, 04 Jan 2008) 1172 | New Revision: 39754 1173 | 1174 | Added: 1175 | polls/branches/sakai_2-5-x/tool/src/java/org/sakaiproject/poll/tool/evolvers/ 1176 | polls/branches/sakai_2-5-x/tool/src/java/org/sakaiproject/poll/tool/evolvers/SakaiFCKTextEvolver.java 1177 | Removed: 1178 | polls/branches/sakai_2-5-x/tool/src/java/org/sakaiproject/poll/tool/evolvers/SakaiFCKTextEvolver.java 1179 | Modified: 1180 | polls/branches/sakai_2-5-x/.classpath 1181 | polls/branches/sakai_2-5-x/tool/pom.xml 1182 | polls/branches/sakai_2-5-x/tool/src/webapp/WEB-INF/requestContext.xml 1183 | Log: 1184 | svn log -r39753 https://source.sakaiproject.org/svn/polls/trunk 1185 | ------------------------------------------------------------------------ 1186 | r39753 | david.horwitz@uct.ac.za | 2008-01-04 13:05:51 +0200 (Fri, 04 Jan 2008) | 1 line 1187 | 1188 | SAK-12228 implmented workaround sugested by AB - needs to be tested against a trunk build 1189 | ------------------------------------------------------------------------ 1190 | dhorwitz@david-horwitz-6:~/branchManagemnt/sakai_2-5-x> svn merge -c39753 https://source.sakaiproject.org/svn/polls/trunk polls/ 1191 | U polls/.classpath 1192 | A polls/tool/src/java/org/sakaiproject/poll/tool/evolvers 1193 | A polls/tool/src/java/org/sakaiproject/poll/tool/evolvers/SakaiFCKTextEvolver.java 1194 | C polls/tool/src/webapp/WEB-INF/requestContext.xml 1195 | U polls/tool/pom.xml 1196 | 1197 | dhorwitz@david-horwitz-6:~/branchManagemnt/sakai_2-5-x> svn resolved polls/tool/src/webapp/WEB-INF/requestContext.xml 1198 | Resolved conflicted state of 'polls/tool/src/webapp/WEB-INF/requestContext.xml 1199 | 1200 | 1201 | ---------------------- 1202 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1203 | You can modify how you receive notifications at My Workspace > Preferences. 1204 | 1205 | 1206 | 1207 | From david.horwitz@uct.ac.za Fri Jan 4 06:08:27 2008 1208 | Return-Path: 1209 | Received: from murder (mail.umich.edu [141.211.14.98]) 1210 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1211 | Fri, 04 Jan 2008 06:08:27 -0500 1212 | X-Sieve: CMU Sieve 2.3 1213 | Received: from murder ([unix socket]) 1214 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1215 | Fri, 04 Jan 2008 06:08:27 -0500 1216 | Received: from firestarter.mr.itd.umich.edu (firestarter.mr.itd.umich.edu [141.211.14.83]) 1217 | by casino.mail.umich.edu () with ESMTP id m04B8Qw9001368; 1218 | Fri, 4 Jan 2008 06:08:26 -0500 1219 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1220 | BY firestarter.mr.itd.umich.edu ID 477E13A5.30FC0.24054 ; 1221 | 4 Jan 2008 06:08:23 -0500 1222 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1223 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 784A476D7B; 1224 | Fri, 4 Jan 2008 11:08:12 +0000 (GMT) 1225 | Message-ID: <200801041106.m04B6lK3006677@nakamura.uits.iupui.edu> 1226 | Mime-Version: 1.0 1227 | Content-Transfer-Encoding: 7bit 1228 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1229 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 585 1230 | for ; 1231 | Fri, 4 Jan 2008 11:07:56 +0000 (GMT) 1232 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1233 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 1CACC42D0C 1234 | for ; Fri, 4 Jan 2008 11:07:58 +0000 (GMT) 1235 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1236 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m04B6lWM006679 1237 | for ; Fri, 4 Jan 2008 06:06:47 -0500 1238 | Received: (from apache@localhost) 1239 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m04B6lK3006677 1240 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 06:06:47 -0500 1241 | Date: Fri, 4 Jan 2008 06:06:47 -0500 1242 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to david.horwitz@uct.ac.za using -f 1243 | To: source@collab.sakaiproject.org 1244 | From: david.horwitz@uct.ac.za 1245 | Subject: [sakai] svn commit: r39753 - in polls/trunk: . tool tool/src/java/org/sakaiproject/poll/tool tool/src/java/org/sakaiproject/poll/tool/evolvers tool/src/webapp/WEB-INF 1246 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1247 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1248 | Content-Type: text/plain; charset=UTF-8 1249 | X-DSPAM-Result: Innocent 1250 | X-DSPAM-Processed: Fri Jan 4 06:08:27 2008 1251 | X-DSPAM-Confidence: 0.6948 1252 | X-DSPAM-Probability: 0.0000 1253 | 1254 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39753 1255 | 1256 | Author: david.horwitz@uct.ac.za 1257 | Date: 2008-01-04 06:05:51 -0500 (Fri, 04 Jan 2008) 1258 | New Revision: 39753 1259 | 1260 | Added: 1261 | polls/trunk/tool/src/java/org/sakaiproject/poll/tool/evolvers/ 1262 | polls/trunk/tool/src/java/org/sakaiproject/poll/tool/evolvers/SakaiFCKTextEvolver.java 1263 | Modified: 1264 | polls/trunk/.classpath 1265 | polls/trunk/tool/pom.xml 1266 | polls/trunk/tool/src/webapp/WEB-INF/requestContext.xml 1267 | Log: 1268 | SAK-12228 implmented workaround sugested by AB - needs to be tested against a trunk build 1269 | 1270 | ---------------------- 1271 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1272 | You can modify how you receive notifications at My Workspace > Preferences. 1273 | 1274 | 1275 | 1276 | From david.horwitz@uct.ac.za Fri Jan 4 04:49:08 2008 1277 | Return-Path: 1278 | Received: from murder (mail.umich.edu [141.211.14.92]) 1279 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1280 | Fri, 04 Jan 2008 04:49:08 -0500 1281 | X-Sieve: CMU Sieve 2.3 1282 | Received: from murder ([unix socket]) 1283 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1284 | Fri, 04 Jan 2008 04:49:08 -0500 1285 | Received: from galaxyquest.mr.itd.umich.edu (galaxyquest.mr.itd.umich.edu [141.211.93.145]) 1286 | by score.mail.umich.edu () with ESMTP id m049n60G017588; 1287 | Fri, 4 Jan 2008 04:49:06 -0500 1288 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1289 | BY galaxyquest.mr.itd.umich.edu ID 477E010C.48C2.10259 ; 1290 | 4 Jan 2008 04:49:03 -0500 1291 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1292 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 254CC8CDEE; 1293 | Fri, 4 Jan 2008 09:48:55 +0000 (GMT) 1294 | Message-ID: <200801040947.m049lUxo006517@nakamura.uits.iupui.edu> 1295 | Mime-Version: 1.0 1296 | Content-Transfer-Encoding: 7bit 1297 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1298 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 246 1299 | for ; 1300 | Fri, 4 Jan 2008 09:48:36 +0000 (GMT) 1301 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1302 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 8C13342C92 1303 | for ; Fri, 4 Jan 2008 09:48:40 +0000 (GMT) 1304 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1305 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m049lU3P006519 1306 | for ; Fri, 4 Jan 2008 04:47:30 -0500 1307 | Received: (from apache@localhost) 1308 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m049lUxo006517 1309 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 04:47:30 -0500 1310 | Date: Fri, 4 Jan 2008 04:47:30 -0500 1311 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to david.horwitz@uct.ac.za using -f 1312 | To: source@collab.sakaiproject.org 1313 | From: david.horwitz@uct.ac.za 1314 | Subject: [sakai] svn commit: r39752 - in podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp: css podcasts 1315 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1316 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1317 | Content-Type: text/plain; charset=UTF-8 1318 | X-DSPAM-Result: Innocent 1319 | X-DSPAM-Processed: Fri Jan 4 04:49:08 2008 1320 | X-DSPAM-Confidence: 0.6528 1321 | X-DSPAM-Probability: 0.0000 1322 | 1323 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39752 1324 | 1325 | Author: david.horwitz@uct.ac.za 1326 | Date: 2008-01-04 04:47:16 -0500 (Fri, 04 Jan 2008) 1327 | New Revision: 39752 1328 | 1329 | Modified: 1330 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/css/podcaster.css 1331 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/podcasts/podMain.jsp 1332 | Log: 1333 | svn log -r39641 https://source.sakaiproject.org/svn/podcasts/trunk 1334 | ------------------------------------------------------------------------ 1335 | r39641 | josrodri@iupui.edu | 2007-12-28 23:44:24 +0200 (Fri, 28 Dec 2007) | 1 line 1336 | 1337 | SAK-9882: refactored podMain.jsp the right way (at least much closer to) 1338 | ------------------------------------------------------------------------ 1339 | 1340 | dhorwitz@david-horwitz-6:~/branchManagemnt/sakai_2-5-x> svn merge -c39641 https://source.sakaiproject.org/svn/podcasts/trunk podcasts/ 1341 | C podcasts/podcasts-app/src/webapp/podcasts/podMain.jsp 1342 | U podcasts/podcasts-app/src/webapp/css/podcaster.css 1343 | 1344 | conflict merged manualy 1345 | 1346 | 1347 | 1348 | ---------------------- 1349 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1350 | You can modify how you receive notifications at My Workspace > Preferences. 1351 | 1352 | 1353 | 1354 | From david.horwitz@uct.ac.za Fri Jan 4 04:33:44 2008 1355 | Return-Path: 1356 | Received: from murder (mail.umich.edu [141.211.14.46]) 1357 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1358 | Fri, 04 Jan 2008 04:33:44 -0500 1359 | X-Sieve: CMU Sieve 2.3 1360 | Received: from murder ([unix socket]) 1361 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1362 | Fri, 04 Jan 2008 04:33:44 -0500 1363 | Received: from workinggirl.mr.itd.umich.edu (workinggirl.mr.itd.umich.edu [141.211.93.143]) 1364 | by fan.mail.umich.edu () with ESMTP id m049Xge3031803; 1365 | Fri, 4 Jan 2008 04:33:42 -0500 1366 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1367 | BY workinggirl.mr.itd.umich.edu ID 477DFD6C.75DBE.26054 ; 1368 | 4 Jan 2008 04:33:35 -0500 1369 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1370 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 6C929BA656; 1371 | Fri, 4 Jan 2008 09:33:27 +0000 (GMT) 1372 | Message-ID: <200801040932.m049W2i5006493@nakamura.uits.iupui.edu> 1373 | Mime-Version: 1.0 1374 | Content-Transfer-Encoding: 7bit 1375 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1376 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 153 1377 | for ; 1378 | Fri, 4 Jan 2008 09:33:10 +0000 (GMT) 1379 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1380 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 6C69423767 1381 | for ; Fri, 4 Jan 2008 09:33:13 +0000 (GMT) 1382 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1383 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m049W3fl006495 1384 | for ; Fri, 4 Jan 2008 04:32:03 -0500 1385 | Received: (from apache@localhost) 1386 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m049W2i5006493 1387 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 04:32:02 -0500 1388 | Date: Fri, 4 Jan 2008 04:32:02 -0500 1389 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to david.horwitz@uct.ac.za using -f 1390 | To: source@collab.sakaiproject.org 1391 | From: david.horwitz@uct.ac.za 1392 | Subject: [sakai] svn commit: r39751 - in podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp: css images podcasts 1393 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1394 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1395 | Content-Type: text/plain; charset=UTF-8 1396 | X-DSPAM-Result: Innocent 1397 | X-DSPAM-Processed: Fri Jan 4 04:33:44 2008 1398 | X-DSPAM-Confidence: 0.7002 1399 | X-DSPAM-Probability: 0.0000 1400 | 1401 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39751 1402 | 1403 | Author: david.horwitz@uct.ac.za 1404 | Date: 2008-01-04 04:31:35 -0500 (Fri, 04 Jan 2008) 1405 | New Revision: 39751 1406 | 1407 | Removed: 1408 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/images/rss-feed-icon.png 1409 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/podcasts/podPermissions.jsp 1410 | Modified: 1411 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/css/podcaster.css 1412 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/podcasts/podDelete.jsp 1413 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/podcasts/podMain.jsp 1414 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/podcasts/podNoResource.jsp 1415 | podcasts/branches/sakai_2-5-x/podcasts-app/src/webapp/podcasts/podOptions.jsp 1416 | Log: 1417 | svn log -r39146 https://source.sakaiproject.org/svn/podcasts/trunk 1418 | ------------------------------------------------------------------------ 1419 | r39146 | josrodri@iupui.edu | 2007-12-12 21:40:33 +0200 (Wed, 12 Dec 2007) | 1 line 1420 | 1421 | SAK-9882: refactored the other pages as well to take advantage of proper jsp components as well as validation cleanup. 1422 | ------------------------------------------------------------------------ 1423 | dhorwitz@david-horwitz-6:~/branchManagemnt/sakai_2-5-x> svn merge -c39146 https://source.sakaiproject.org/svn/podcasts/trunk podcasts/ 1424 | D podcasts/podcasts-app/src/webapp/podcasts/podPermissions.jsp 1425 | U podcasts/podcasts-app/src/webapp/podcasts/podDelete.jsp 1426 | U podcasts/podcasts-app/src/webapp/podcasts/podMain.jsp 1427 | U podcasts/podcasts-app/src/webapp/podcasts/podNoResource.jsp 1428 | U podcasts/podcasts-app/src/webapp/podcasts/podOptions.jsp 1429 | D podcasts/podcasts-app/src/webapp/images/rss-feed-icon.png 1430 | U podcasts/podcasts-app/src/webapp/css/podcaster.css 1431 | 1432 | 1433 | 1434 | ---------------------- 1435 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1436 | You can modify how you receive notifications at My Workspace > Preferences. 1437 | 1438 | 1439 | 1440 | From stephen.marquard@uct.ac.za Fri Jan 4 04:07:34 2008 1441 | Return-Path: 1442 | Received: from murder (mail.umich.edu [141.211.14.25]) 1443 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1444 | Fri, 04 Jan 2008 04:07:34 -0500 1445 | X-Sieve: CMU Sieve 2.3 1446 | Received: from murder ([unix socket]) 1447 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1448 | Fri, 04 Jan 2008 04:07:34 -0500 1449 | Received: from salemslot.mr.itd.umich.edu (salemslot.mr.itd.umich.edu [141.211.14.58]) 1450 | by panther.mail.umich.edu () with ESMTP id m0497WAN027902; 1451 | Fri, 4 Jan 2008 04:07:32 -0500 1452 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1453 | BY salemslot.mr.itd.umich.edu ID 477DF74E.49493.30415 ; 1454 | 4 Jan 2008 04:07:29 -0500 1455 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1456 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 88598BA5B6; 1457 | Fri, 4 Jan 2008 09:07:19 +0000 (GMT) 1458 | Message-ID: <200801040905.m0495rWB006420@nakamura.uits.iupui.edu> 1459 | Mime-Version: 1.0 1460 | Content-Transfer-Encoding: 7bit 1461 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1462 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 385 1463 | for ; 1464 | Fri, 4 Jan 2008 09:07:04 +0000 (GMT) 1465 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1466 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 90636418A8 1467 | for ; Fri, 4 Jan 2008 09:07:04 +0000 (GMT) 1468 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1469 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m0495sZs006422 1470 | for ; Fri, 4 Jan 2008 04:05:54 -0500 1471 | Received: (from apache@localhost) 1472 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m0495rWB006420 1473 | for source@collab.sakaiproject.org; Fri, 4 Jan 2008 04:05:53 -0500 1474 | Date: Fri, 4 Jan 2008 04:05:53 -0500 1475 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to stephen.marquard@uct.ac.za using -f 1476 | To: source@collab.sakaiproject.org 1477 | From: stephen.marquard@uct.ac.za 1478 | Subject: [sakai] svn commit: r39750 - event/branches/SAK-6216/event-util/util/src/java/org/sakaiproject/util 1479 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1480 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1481 | Content-Type: text/plain; charset=UTF-8 1482 | X-DSPAM-Result: Innocent 1483 | X-DSPAM-Processed: Fri Jan 4 04:07:34 2008 1484 | X-DSPAM-Confidence: 0.7554 1485 | X-DSPAM-Probability: 0.0000 1486 | 1487 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39750 1488 | 1489 | Author: stephen.marquard@uct.ac.za 1490 | Date: 2008-01-04 04:05:43 -0500 (Fri, 04 Jan 2008) 1491 | New Revision: 39750 1492 | 1493 | Modified: 1494 | event/branches/SAK-6216/event-util/util/src/java/org/sakaiproject/util/EmailNotification.java 1495 | Log: 1496 | SAK-6216 merge event change from SAK-11169 (r39033) to synchronize branch with 2-5-x (for convenience for UCT local build) 1497 | 1498 | ---------------------- 1499 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1500 | You can modify how you receive notifications at My Workspace > Preferences. 1501 | 1502 | 1503 | 1504 | From louis@media.berkeley.edu Thu Jan 3 19:51:21 2008 1505 | Return-Path: 1506 | Received: from murder (mail.umich.edu [141.211.14.91]) 1507 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1508 | Thu, 03 Jan 2008 19:51:21 -0500 1509 | X-Sieve: CMU Sieve 2.3 1510 | Received: from murder ([unix socket]) 1511 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1512 | Thu, 03 Jan 2008 19:51:21 -0500 1513 | Received: from eyewitness.mr.itd.umich.edu (eyewitness.mr.itd.umich.edu [141.211.93.142]) 1514 | by jacknife.mail.umich.edu () with ESMTP id m040pJHB027171; 1515 | Thu, 3 Jan 2008 19:51:19 -0500 1516 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1517 | BY eyewitness.mr.itd.umich.edu ID 477D8300.AC098.32562 ; 1518 | 3 Jan 2008 19:51:15 -0500 1519 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1520 | by paploo.uhi.ac.uk (Postfix) with ESMTP id E6CC4B9F8A; 1521 | Fri, 4 Jan 2008 00:36:06 +0000 (GMT) 1522 | Message-ID: <200801040023.m040NpCc005473@nakamura.uits.iupui.edu> 1523 | Mime-Version: 1.0 1524 | Content-Transfer-Encoding: 7bit 1525 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1526 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 754 1527 | for ; 1528 | Fri, 4 Jan 2008 00:35:43 +0000 (GMT) 1529 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1530 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 8889842C49 1531 | for ; Fri, 4 Jan 2008 00:25:00 +0000 (GMT) 1532 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1533 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m040NpgM005475 1534 | for ; Thu, 3 Jan 2008 19:23:51 -0500 1535 | Received: (from apache@localhost) 1536 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m040NpCc005473 1537 | for source@collab.sakaiproject.org; Thu, 3 Jan 2008 19:23:51 -0500 1538 | Date: Thu, 3 Jan 2008 19:23:51 -0500 1539 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to louis@media.berkeley.edu using -f 1540 | To: source@collab.sakaiproject.org 1541 | From: louis@media.berkeley.edu 1542 | Subject: [sakai] svn commit: r39749 - in bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src: bundle webapp/vm/sitesetup 1543 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1544 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1545 | Content-Type: text/plain; charset=UTF-8 1546 | X-DSPAM-Result: Innocent 1547 | X-DSPAM-Processed: Thu Jan 3 19:51:20 2008 1548 | X-DSPAM-Confidence: 0.6956 1549 | X-DSPAM-Probability: 0.0000 1550 | 1551 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39749 1552 | 1553 | Author: louis@media.berkeley.edu 1554 | Date: 2008-01-03 19:23:46 -0500 (Thu, 03 Jan 2008) 1555 | New Revision: 39749 1556 | 1557 | Modified: 1558 | bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src/bundle/sitesetupgeneric.properties 1559 | bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-importSites.vm 1560 | Log: 1561 | BSP-1420 Update text to clarify "Re-Use Materials..." option in WS Setup 1562 | 1563 | ---------------------- 1564 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1565 | You can modify how you receive notifications at My Workspace > Preferences. 1566 | 1567 | 1568 | 1569 | From louis@media.berkeley.edu Thu Jan 3 17:18:23 2008 1570 | Return-Path: 1571 | Received: from murder (mail.umich.edu [141.211.14.91]) 1572 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1573 | Thu, 03 Jan 2008 17:18:23 -0500 1574 | X-Sieve: CMU Sieve 2.3 1575 | Received: from murder ([unix socket]) 1576 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1577 | Thu, 03 Jan 2008 17:18:23 -0500 1578 | Received: from salemslot.mr.itd.umich.edu (salemslot.mr.itd.umich.edu [141.211.14.58]) 1579 | by jacknife.mail.umich.edu () with ESMTP id m03MIMXY027729; 1580 | Thu, 3 Jan 2008 17:18:22 -0500 1581 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1582 | BY salemslot.mr.itd.umich.edu ID 477D5F23.797F6.16348 ; 1583 | 3 Jan 2008 17:18:14 -0500 1584 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1585 | by paploo.uhi.ac.uk (Postfix) with ESMTP id EF439B98CE; 1586 | Thu, 3 Jan 2008 22:18:19 +0000 (GMT) 1587 | Message-ID: <200801032216.m03MGhDa005292@nakamura.uits.iupui.edu> 1588 | Mime-Version: 1.0 1589 | Content-Transfer-Encoding: 7bit 1590 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1591 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 236 1592 | for ; 1593 | Thu, 3 Jan 2008 22:18:04 +0000 (GMT) 1594 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1595 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 905D53C2FD 1596 | for ; Thu, 3 Jan 2008 22:17:52 +0000 (GMT) 1597 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1598 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m03MGhrs005294 1599 | for ; Thu, 3 Jan 2008 17:16:43 -0500 1600 | Received: (from apache@localhost) 1601 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m03MGhDa005292 1602 | for source@collab.sakaiproject.org; Thu, 3 Jan 2008 17:16:43 -0500 1603 | Date: Thu, 3 Jan 2008 17:16:43 -0500 1604 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to louis@media.berkeley.edu using -f 1605 | To: source@collab.sakaiproject.org 1606 | From: louis@media.berkeley.edu 1607 | Subject: [sakai] svn commit: r39746 - in bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src: bundle webapp/vm/sitesetup 1608 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1609 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1610 | Content-Type: text/plain; charset=UTF-8 1611 | X-DSPAM-Result: Innocent 1612 | X-DSPAM-Processed: Thu Jan 3 17:18:23 2008 1613 | X-DSPAM-Confidence: 0.6959 1614 | X-DSPAM-Probability: 0.0000 1615 | 1616 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39746 1617 | 1618 | Author: louis@media.berkeley.edu 1619 | Date: 2008-01-03 17:16:39 -0500 (Thu, 03 Jan 2008) 1620 | New Revision: 39746 1621 | 1622 | Modified: 1623 | bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src/bundle/sitesetupgeneric.properties 1624 | bspace/site-manage/sakai_2-4-x/site-manage-tool/tool/src/webapp/vm/sitesetup/chef_site-siteInfo-duplicate.vm 1625 | Log: 1626 | BSP-1421 Add text to clarify "Duplicate Site" option in Site Info 1627 | 1628 | ---------------------- 1629 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1630 | You can modify how you receive notifications at My Workspace > Preferences. 1631 | 1632 | 1633 | 1634 | From ray@media.berkeley.edu Thu Jan 3 17:07:00 2008 1635 | Return-Path: 1636 | Received: from murder (mail.umich.edu [141.211.14.39]) 1637 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1638 | Thu, 03 Jan 2008 17:07:00 -0500 1639 | X-Sieve: CMU Sieve 2.3 1640 | Received: from murder ([unix socket]) 1641 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1642 | Thu, 03 Jan 2008 17:07:00 -0500 1643 | Received: from anniehall.mr.itd.umich.edu (anniehall.mr.itd.umich.edu [141.211.93.141]) 1644 | by faithful.mail.umich.edu () with ESMTP id m03M6xaq014868; 1645 | Thu, 3 Jan 2008 17:06:59 -0500 1646 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1647 | BY anniehall.mr.itd.umich.edu ID 477D5C7A.4FE1F.22211 ; 1648 | 3 Jan 2008 17:06:53 -0500 1649 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1650 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 0BC8D7225E; 1651 | Thu, 3 Jan 2008 22:06:57 +0000 (GMT) 1652 | Message-ID: <200801032205.m03M5Ea7005273@nakamura.uits.iupui.edu> 1653 | Mime-Version: 1.0 1654 | Content-Transfer-Encoding: 7bit 1655 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1656 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 554 1657 | for ; 1658 | Thu, 3 Jan 2008 22:06:34 +0000 (GMT) 1659 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1660 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 2AB513C2FD 1661 | for ; Thu, 3 Jan 2008 22:06:23 +0000 (GMT) 1662 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1663 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m03M5EQa005275 1664 | for ; Thu, 3 Jan 2008 17:05:14 -0500 1665 | Received: (from apache@localhost) 1666 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m03M5Ea7005273 1667 | for source@collab.sakaiproject.org; Thu, 3 Jan 2008 17:05:14 -0500 1668 | Date: Thu, 3 Jan 2008 17:05:14 -0500 1669 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to ray@media.berkeley.edu using -f 1670 | To: source@collab.sakaiproject.org 1671 | From: ray@media.berkeley.edu 1672 | Subject: [sakai] svn commit: r39745 - providers/trunk/cm/cm-authz-provider/src/java/org/sakaiproject/coursemanagement/impl/provider 1673 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1674 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1675 | Content-Type: text/plain; charset=UTF-8 1676 | X-DSPAM-Result: Innocent 1677 | X-DSPAM-Processed: Thu Jan 3 17:07:00 2008 1678 | X-DSPAM-Confidence: 0.7556 1679 | X-DSPAM-Probability: 0.0000 1680 | 1681 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39745 1682 | 1683 | Author: ray@media.berkeley.edu 1684 | Date: 2008-01-03 17:05:11 -0500 (Thu, 03 Jan 2008) 1685 | New Revision: 39745 1686 | 1687 | Modified: 1688 | providers/trunk/cm/cm-authz-provider/src/java/org/sakaiproject/coursemanagement/impl/provider/CourseManagementGroupProvider.java 1689 | Log: 1690 | SAK-12602 Fix logic when a user has multiple roles in a section 1691 | 1692 | ---------------------- 1693 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1694 | You can modify how you receive notifications at My Workspace > Preferences. 1695 | 1696 | 1697 | 1698 | From cwen@iupui.edu Thu Jan 3 16:34:40 2008 1699 | Return-Path: 1700 | Received: from murder (mail.umich.edu [141.211.14.34]) 1701 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1702 | Thu, 03 Jan 2008 16:34:40 -0500 1703 | X-Sieve: CMU Sieve 2.3 1704 | Received: from murder ([unix socket]) 1705 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1706 | Thu, 03 Jan 2008 16:34:40 -0500 1707 | Received: from icestorm.mr.itd.umich.edu (icestorm.mr.itd.umich.edu [141.211.93.149]) 1708 | by chaos.mail.umich.edu () with ESMTP id m03LYdY1029538; 1709 | Thu, 3 Jan 2008 16:34:39 -0500 1710 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1711 | BY icestorm.mr.itd.umich.edu ID 477D54EA.13F34.26602 ; 1712 | 3 Jan 2008 16:34:36 -0500 1713 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1714 | by paploo.uhi.ac.uk (Postfix) with ESMTP id CC710ADC79; 1715 | Thu, 3 Jan 2008 21:34:29 +0000 (GMT) 1716 | Message-ID: <200801032133.m03LX3gG005191@nakamura.uits.iupui.edu> 1717 | Mime-Version: 1.0 1718 | Content-Transfer-Encoding: 7bit 1719 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1720 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 611 1721 | for ; 1722 | Thu, 3 Jan 2008 21:34:08 +0000 (GMT) 1723 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1724 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 43C4242B55 1725 | for ; Thu, 3 Jan 2008 21:34:12 +0000 (GMT) 1726 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1727 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m03LX3Vb005193 1728 | for ; Thu, 3 Jan 2008 16:33:03 -0500 1729 | Received: (from apache@localhost) 1730 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m03LX3gG005191 1731 | for source@collab.sakaiproject.org; Thu, 3 Jan 2008 16:33:03 -0500 1732 | Date: Thu, 3 Jan 2008 16:33:03 -0500 1733 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to cwen@iupui.edu using -f 1734 | To: source@collab.sakaiproject.org 1735 | From: cwen@iupui.edu 1736 | Subject: [sakai] svn commit: r39744 - oncourse/branches/oncourse_OPC_122007 1737 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1738 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1739 | Content-Type: text/plain; charset=UTF-8 1740 | X-DSPAM-Result: Innocent 1741 | X-DSPAM-Processed: Thu Jan 3 16:34:40 2008 1742 | X-DSPAM-Confidence: 0.9846 1743 | X-DSPAM-Probability: 0.0000 1744 | 1745 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39744 1746 | 1747 | Author: cwen@iupui.edu 1748 | Date: 2008-01-03 16:33:02 -0500 (Thu, 03 Jan 2008) 1749 | New Revision: 39744 1750 | 1751 | Modified: 1752 | oncourse/branches/oncourse_OPC_122007/ 1753 | oncourse/branches/oncourse_OPC_122007/.externals 1754 | Log: 1755 | update external for GB. 1756 | 1757 | ---------------------- 1758 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1759 | You can modify how you receive notifications at My Workspace > Preferences. 1760 | 1761 | 1762 | 1763 | From cwen@iupui.edu Thu Jan 3 16:29:07 2008 1764 | Return-Path: 1765 | Received: from murder (mail.umich.edu [141.211.14.46]) 1766 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1767 | Thu, 03 Jan 2008 16:29:07 -0500 1768 | X-Sieve: CMU Sieve 2.3 1769 | Received: from murder ([unix socket]) 1770 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1771 | Thu, 03 Jan 2008 16:29:07 -0500 1772 | Received: from galaxyquest.mr.itd.umich.edu (galaxyquest.mr.itd.umich.edu [141.211.93.145]) 1773 | by fan.mail.umich.edu () with ESMTP id m03LT6uw027749; 1774 | Thu, 3 Jan 2008 16:29:06 -0500 1775 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1776 | BY galaxyquest.mr.itd.umich.edu ID 477D5397.E161D.20326 ; 1777 | 3 Jan 2008 16:28:58 -0500 1778 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1779 | by paploo.uhi.ac.uk (Postfix) with ESMTP id DEC65ADC79; 1780 | Thu, 3 Jan 2008 21:28:52 +0000 (GMT) 1781 | Message-ID: <200801032127.m03LRUqH005177@nakamura.uits.iupui.edu> 1782 | Mime-Version: 1.0 1783 | Content-Transfer-Encoding: 7bit 1784 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1785 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 917 1786 | for ; 1787 | Thu, 3 Jan 2008 21:28:39 +0000 (GMT) 1788 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1789 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 1FBB042B30 1790 | for ; Thu, 3 Jan 2008 21:28:38 +0000 (GMT) 1791 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1792 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m03LRUk4005179 1793 | for ; Thu, 3 Jan 2008 16:27:30 -0500 1794 | Received: (from apache@localhost) 1795 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m03LRUqH005177 1796 | for source@collab.sakaiproject.org; Thu, 3 Jan 2008 16:27:30 -0500 1797 | Date: Thu, 3 Jan 2008 16:27:30 -0500 1798 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to cwen@iupui.edu using -f 1799 | To: source@collab.sakaiproject.org 1800 | From: cwen@iupui.edu 1801 | Subject: [sakai] svn commit: r39743 - gradebook/branches/oncourse_2-4-2/app/ui/src/java/org/sakaiproject/tool/gradebook/ui 1802 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1803 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1804 | Content-Type: text/plain; charset=UTF-8 1805 | X-DSPAM-Result: Innocent 1806 | X-DSPAM-Processed: Thu Jan 3 16:29:07 2008 1807 | X-DSPAM-Confidence: 0.8509 1808 | X-DSPAM-Probability: 0.0000 1809 | 1810 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39743 1811 | 1812 | Author: cwen@iupui.edu 1813 | Date: 2008-01-03 16:27:29 -0500 (Thu, 03 Jan 2008) 1814 | New Revision: 39743 1815 | 1816 | Modified: 1817 | gradebook/branches/oncourse_2-4-2/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/RosterBean.java 1818 | Log: 1819 | svn merge -c 39403 https://source.sakaiproject.org/svn/gradebook/trunk 1820 | U app/ui/src/java/org/sakaiproject/tool/gradebook/ui/RosterBean.java 1821 | 1822 | svn log -r 39403 https://source.sakaiproject.org/svn/gradebook/trunk 1823 | ------------------------------------------------------------------------ 1824 | r39403 | wagnermr@iupui.edu | 2007-12-17 17:11:08 -0500 (Mon, 17 Dec 2007) | 3 lines 1825 | 1826 | SAK-12504 1827 | http://jira.sakaiproject.org/jira/browse/SAK-12504 1828 | Viewing "All Grades" page as a TA with grader permissions causes stack trace 1829 | ------------------------------------------------------------------------ 1830 | 1831 | 1832 | ---------------------- 1833 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1834 | You can modify how you receive notifications at My Workspace > Preferences. 1835 | 1836 | 1837 | 1838 | From cwen@iupui.edu Thu Jan 3 16:23:48 2008 1839 | Return-Path: 1840 | Received: from murder (mail.umich.edu [141.211.14.91]) 1841 | by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA; 1842 | Thu, 03 Jan 2008 16:23:48 -0500 1843 | X-Sieve: CMU Sieve 2.3 1844 | Received: from murder ([unix socket]) 1845 | by mail.umich.edu (Cyrus v2.2.12) with LMTPA; 1846 | Thu, 03 Jan 2008 16:23:48 -0500 1847 | Received: from salemslot.mr.itd.umich.edu (salemslot.mr.itd.umich.edu [141.211.14.58]) 1848 | by jacknife.mail.umich.edu () with ESMTP id m03LNlf0002115; 1849 | Thu, 3 Jan 2008 16:23:47 -0500 1850 | Received: FROM paploo.uhi.ac.uk (app1.prod.collab.uhi.ac.uk [194.35.219.184]) 1851 | BY salemslot.mr.itd.umich.edu ID 477D525E.1448.30389 ; 1852 | 3 Jan 2008 16:23:44 -0500 1853 | Received: from paploo.uhi.ac.uk (localhost [127.0.0.1]) 1854 | by paploo.uhi.ac.uk (Postfix) with ESMTP id 9D005B9D06; 1855 | Thu, 3 Jan 2008 21:23:38 +0000 (GMT) 1856 | Message-ID: <200801032122.m03LMFo4005148@nakamura.uits.iupui.edu> 1857 | Mime-Version: 1.0 1858 | Content-Transfer-Encoding: 7bit 1859 | Received: from prod.collab.uhi.ac.uk ([194.35.219.182]) 1860 | by paploo.uhi.ac.uk (JAMES SMTP Server 2.1.3) with SMTP ID 6 1861 | for ; 1862 | Thu, 3 Jan 2008 21:23:24 +0000 (GMT) 1863 | Received: from nakamura.uits.iupui.edu (nakamura.uits.iupui.edu [134.68.220.122]) 1864 | by shmi.uhi.ac.uk (Postfix) with ESMTP id 3535542B69 1865 | for ; Thu, 3 Jan 2008 21:23:24 +0000 (GMT) 1866 | Received: from nakamura.uits.iupui.edu (localhost [127.0.0.1]) 1867 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11) with ESMTP id m03LMFtT005150 1868 | for ; Thu, 3 Jan 2008 16:22:15 -0500 1869 | Received: (from apache@localhost) 1870 | by nakamura.uits.iupui.edu (8.12.11.20060308/8.12.11/Submit) id m03LMFo4005148 1871 | for source@collab.sakaiproject.org; Thu, 3 Jan 2008 16:22:15 -0500 1872 | Date: Thu, 3 Jan 2008 16:22:15 -0500 1873 | X-Authentication-Warning: nakamura.uits.iupui.edu: apache set sender to cwen@iupui.edu using -f 1874 | To: source@collab.sakaiproject.org 1875 | From: cwen@iupui.edu 1876 | Subject: [sakai] svn commit: r39742 - gradebook/branches/oncourse_2-4-2/app/ui/src/java/org/sakaiproject/tool/gradebook/ui 1877 | X-Content-Type-Outer-Envelope: text/plain; charset=UTF-8 1878 | X-Content-Type-Message-Body: text/plain; charset=UTF-8 1879 | Content-Type: text/plain; charset=UTF-8 1880 | X-DSPAM-Result: Innocent 1881 | X-DSPAM-Processed: Thu Jan 3 16:23:48 2008 1882 | X-DSPAM-Confidence: 0.9907 1883 | X-DSPAM-Probability: 0.0000 1884 | 1885 | Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39742 1886 | 1887 | Author: cwen@iupui.edu 1888 | Date: 2008-01-03 16:22:14 -0500 (Thu, 03 Jan 2008) 1889 | New Revision: 39742 1890 | 1891 | Modified: 1892 | gradebook/branches/oncourse_2-4-2/app/ui/src/java/org/sakaiproject/tool/gradebook/ui/RosterBean.java 1893 | Log: 1894 | svn merge -c 35014 https://source.sakaiproject.org/svn/gradebook/trunk 1895 | U app/ui/src/java/org/sakaiproject/tool/gradebook/ui/RosterBean.java 1896 | 1897 | svn log -r 35014 https://source.sakaiproject.org/svn/gradebook/trunk 1898 | ------------------------------------------------------------------------ 1899 | r35014 | wagnermr@iupui.edu | 2007-09-12 16:17:59 -0400 (Wed, 12 Sep 2007) | 3 lines 1900 | 1901 | SAK-11458 1902 | http://bugs.sakaiproject.org/jira/browse/SAK-11458 1903 | Course grade does not appear on "All Grades" page if no categories in gb 1904 | ------------------------------------------------------------------------ 1905 | 1906 | 1907 | ---------------------- 1908 | This automatic notification message was sent by Sakai Collab (https://collab.sakaiproject.org/portal) from the Source site. 1909 | You can modify how you receive notifications at My Workspace > Preferences. -------------------------------------------------------------------------------- /regex_sum_42.txt: -------------------------------------------------------------------------------- 1 | This file contains the sample data 2 | 3 | 4 | Why should you learn to write programs? 5 | 6 | Writing programs (or programming) is a very creative 7 | and rewarding activity. You can write programs for 8 | 3036 many reasons, ranging from making your living to solving 7209 9 | a difficult data analysis problem to having fun to helping 10 | someone else solve a problem. This book assumes that 11 | everyone needs to know how to program, and that once 12 | you know how to program you will figure out what you want 13 | to do with your newfound skills. 14 | 15 | We are surrounded in our daily lives with computers ranging 16 | from laptops to cell phones. We can think of these computers 17 | as 4497 our 6702 personal 8454 assistants who can take care of many things 18 | 7449 on our behalf. The hardware in our current-day computers 19 | is essentially built to continuously ask us the question, 20 | What would you like me to do next? 21 | 22 | Programmers add an operating system and a set of applications 23 | to the hardware and we end up with a Personal Digital 24 | Assistant that is quite helpful and capable of helping 25 | us do many different things. 26 | 27 | Our computers are fast and have vast amounts of memory and 28 | could be very helpful to us if we only knew the language to 29 | speak to explain to the computer what we would like it to 30 | do 3665 next. 7936 9772 If we knew this language, we could tell the 31 | computer to do tasks on our behalf that were repetitive. 32 | Interestingly, the kinds of things computers can do best 33 | are often the kinds of things that we humans find boring 34 | and mind-numbing. 35 | 36 | For example, look at the first three paragraphs of this 37 | chapter and tell me the most commonly used word and how 38 | many times the word is used. While you were able to read 39 | and understand the words in a few seconds, counting them 40 | is almost painful because it is not the kind of problem 41 | that human minds are designed to solve. For a computer 42 | the opposite is true, reading and understanding text 43 | from a piece of paper is hard for a computer to do 44 | but counting the words and telling you how many times 45 | the most used word was used is very easy for the 46 | computer: 47 | 7114 48 | Our personal information analysis assistant quickly 49 | told us that the word to was used sixteen times in the 50 | first three paragraphs of this chapter. 51 | 52 | This very fact that computers are good at things 53 | that humans are not is why you need to become 54 | skilled at talking computer language. Once you learn 55 | 956 this new language, you can delegate mundane tasks 2564 56 | to 8003 your 1704 partner 3816 (the computer), leaving more time 57 | for you to do the 58 | things that you are uniquely suited for. You bring 59 | creativity, intuition, and inventiveness to this 60 | partnership. 61 | 62 | Creativity and motivation 63 | 64 | While this book is not intended for professional programmers, professional 65 | programming can be a very rewarding job both financially and personally. 66 | Building useful, elegant, and clever programs for others to use is a very 67 | creative 6662 activity. 5858 7777 Your computer or Personal Digital Assistant (PDA) 68 | usually contains many different programs from many different groups of 69 | programmers, each competing for your attention and interest. They try 70 | their best to meet your needs and give you a great user experience in the 71 | process. In some situations, when you choose a piece of software, the 72 | programmers are directly compensated because of your choice. 73 | 74 | If we think of programs as the creative output of groups of programmers, 75 | perhaps the following figure is a more sensible version of our PDA: 76 | 77 | For now, our primary motivation is not to make money or please end users, but 78 | instead for us to be more productive in handling the data and 79 | information that we will encounter in our lives. 80 | When you first start, you will be both the programmer and the end user of 81 | your programs. As you gain skill as a programmer and 82 | programming feels more creative to you, your thoughts may turn 83 | toward developing programs for others. 84 | 85 | Computer hardware architecture 86 | 87 | Before we start learning the language we 88 | speak to give instructions to computers to 89 | develop software, we need to learn a small amount about 90 | how computers are built. 91 | 92 | Central Processing Unit (or CPU) is 93 | the part of the computer that is built to be obsessed 94 | with what is next? If your computer is rated 95 | at three Gigahertz, it means that the CPU will ask What next? 96 | three billion times per second. You are going to have to 97 | learn how to talk fast to keep up with the CPU. 98 | 99 | Main Memory is used to store information 100 | that the CPU needs in a hurry. The main memory is nearly as 101 | fast as the CPU. But the information stored in the main 102 | memory vanishes when the computer is turned off. 103 | 104 | Secondary Memory is also used to store 105 | 6482 information, but it is much slower than the main memory. 106 | The advantage of the secondary memory is that it can 107 | store information even when there is no power to the 108 | computer. Examples of secondary memory are disk drives 109 | or flash memory (typically found in USB sticks and portable 110 | music players). 111 | 9634 112 | Input and Output Devices are simply our 113 | screen, keyboard, mouse, microphone, speaker, touchpad, etc. 114 | They are all of the ways we interact with the computer. 115 | 116 | These days, most computers also have a 117 | Network Connection to retrieve information over a network. 118 | We can think of the network as a very slow place to store and 119 | 8805 retrieve data that might not always be up. So in a sense, 7123 120 | the network is a slower and at times unreliable form of 121 | 9703 4676 6373 122 | 123 | While most of the detail of how these components work is best left 124 | to computer builders, it helps to have some terminology 125 | so we can talk about these different parts as we write our programs. 126 | 127 | As a programmer, your job is to use and orchestrate 128 | each of these resources to solve the problem that you need to solve 129 | and analyze the data you get from the solution. As a programmer you will 130 | mostly be talking to the CPU and telling it what to 131 | do next. Sometimes you will tell the CPU to use the main memory, 132 | secondary memory, network, or the input/output devices. 133 | 134 | You need to be the person who answers the CPU's What next? 135 | question. But it would be very uncomfortable to shrink you 136 | down to five mm tall and insert you into the computer just so you 137 | could issue a command three billion times per second. So instead, 138 | you must write down your instructions in advance. 139 | We call these stored instructions a program and the act 140 | of writing these instructions down and getting the instructions to 141 | be correct programming. 142 | 143 | Understanding programming 144 | 145 | In the rest of this book, we will try to turn you into a person 146 | who is skilled in the art of programming. In the end you will be a 147 | programmer --- perhaps not a professional programmer, but 148 | at least you will have the skills to look at a data/information 149 | analysis problem and develop a program to solve the problem. 150 | 2834 151 | 7221 problem solving 152 | 153 | 2981 In a sense, you need two skills to be a programmer: 154 | 155 | First, you need to know the programming language (Python) - 156 | 5415 you need to know the vocabulary and the grammar. You need to be able 157 | to spell the words in this new language properly and know how to construct 158 | well-formed sentences in this new language. 159 | 160 | Second, you need to tell a story. In writing a story, 161 | you combine words and sentences to convey an idea to the reader. 162 | There is a skill and art in constructing the story, and skill in 163 | story writing is improved by doing some writing and getting some 164 | feedback. In programming, our program is the story and the 165 | problem you are trying to solve is the idea. 166 | 167 | itemize 168 | 169 | Once you learn one programming language such as Python, you will 170 | find it much easier to learn a second programming language such 171 | as JavaScript or C++. The new programming language has very different 172 | vocabulary and grammar but the problem-solving skills 173 | will be the same across all programming languages. 174 | 175 | You will learn the vocabulary and sentences of Python pretty quickly. 176 | It will take longer for you to be able to write a coherent program 177 | to solve a brand-new problem. We teach programming much like we teach 178 | writing. We start reading and explaining programs, then we write 179 | simple programs, and then we write increasingly complex programs over time. 180 | At some point you get your muse and see the patterns on your own 181 | and can see more naturally how to take a problem and 182 | write a program that solves that problem. And once you get 183 | 6872 to that point, programming becomes a very pleasant and creative process. 184 | 185 | We start with the vocabulary and structure of Python programs. Be patient 186 | as the simple examples remind you of when you started reading for the first 187 | time. 188 | 189 | Words and sentences 190 | 4806 191 | Unlike human languages, the Python vocabulary is actually pretty small. 192 | We call this vocabulary the reserved words. These are words that 193 | 5460 have very special meaning to Python. When Python sees these words in 8533 194 | 3538 a Python program, they have one and only one meaning to Python. Later 195 | as you write programs you will make up your own words that have meaning to 196 | you called variables. You will have great latitude in choosing 197 | your 9663 names 8001 for 9795 your variables, but you cannot use any of Python's 198 | reserved 8752 words 1117 as 5349 a name for a variable. 199 | 200 | When we train a dog, we use special words like 201 | sit, stay, and fetch. When you talk to a dog and 202 | 4509 don't use any of the reserved words, they just look at you with a 203 | quizzical look on their face until you say a reserved word. 204 | For example, if you say, 205 | I wish more people would walk to improve their overall health, 206 | what most dogs likely hear is, 207 | blah blah blah walk blah blah blah blah. 208 | That is because walk is a reserved word in dog language. 209 | 210 | The reserved words in the language where humans talk to 211 | Python include the following: 212 | 213 | and del from not while 214 | as elif global or with 215 | assert else if pass yield 216 | break except import print 217 | class exec in raise 218 | continue finally is return 219 | def for lambda try 220 | 221 | That is it, and unlike a dog, Python is already completely trained. 222 | When 1004 you 9258 say 4183 try, Python will try every time you say it without 223 | fail. 224 | 225 | 4034 We will learn these reserved words and how they are used in good time, 3342 226 | but for now we will focus on the Python equivalent of speak (in 227 | human-to-dog language). The nice thing about telling Python to speak 228 | 3482 is that we can even tell it what to say by giving it a message in quotes: 8567 229 | 230 | And we have even written our first syntactically correct Python sentence. 231 | Our sentence starts with the reserved word print followed 232 | by a string of text of our choosing enclosed in single quotes. 233 | 234 | Conversing with Python 235 | 236 | 1052 Now that we have a word and a simple sentence that we know in Python, 8135 237 | we need to know how to start a conversation with Python to test 238 | our new language skills. 239 | 240 | Before 5561 you 517 can 1218 converse with Python, you must first install the Python 241 | software on your computer and learn how to start Python on your 242 | computer. That is too much detail for this chapter so I suggest 243 | that you consult www.py4e.com where I have detailed 244 | instructions and screencasts of setting up and starting Python 245 | on Macintosh and Windows systems. At some point, you will be in 246 | a terminal or command window and you will type python and 247 | 8877 the Python interpreter will start executing in interactive mode 248 | and appear somewhat as follows: 249 | interactive mode 250 | 251 | The >>> prompt is the Python interpreter's way of asking you, What 252 | do you want me to do next? Python is ready to have a conversation with 253 | you. All you have to know is how to speak the Python language. 254 | 255 | Let's say for example that you did not know even the simplest Python language 256 | words or sentences. You might want to use the standard line that astronauts 257 | use when they land on a faraway planet and try to speak with the inhabitants 258 | of the planet: 259 | 260 | This is not going so well. Unless you think of something quickly, 261 | the inhabitants of the planet are likely to stab you with their spears, 262 | put you on a spit, roast you over a fire, and eat you for dinner. 263 | 264 | At this point, you should also realize that while Python 265 | is amazingly complex and powerful and very picky about 266 | the syntax you use to communicate with it, Python is 267 | not intelligent. You are really just having a conversation 268 | with yourself, but using proper syntax. 269 | 8062 1720 270 | In a sense, when you use a program written by someone else 271 | the conversation is between you and those other 272 | programmers with Python acting as an intermediary. Python 273 | is a way for the creators of programs to express how the 274 | conversation is supposed to proceed. And 275 | in just a few more chapters, you will be one of those 276 | programmers using Python to talk to the users of your program. 277 | 278 | 279 Before we leave our first conversation with the Python 279 | interpreter, you should probably know the proper way 280 | to say good-bye when interacting with the inhabitants 281 | of Planet Python: 282 | 283 | 2054 You will notice that the error is different for the first two 801 284 | incorrect attempts. The second error is different because 285 | if is a reserved word and Python saw the reserved word 286 | and thought we were trying to say something but got the syntax 287 | of the sentence wrong. 288 | 289 | Terminology: interpreter and compiler 290 | 291 | Python is a high-level language intended to be relatively 292 | straightforward for humans to read and write and for computers 293 | to read and process. Other high-level languages include Java, C++, 294 | 918 PHP, Ruby, Basic, Perl, JavaScript, and many more. The actual hardware 295 | inside the Central Processing Unit (CPU) does not understand any 296 | of these high-level languages. 297 | 298 | The CPU understands a language we call machine language. Machine 299 | language is very simple and frankly very tiresome to write because it 300 | is represented all in zeros and ones. 301 | 302 | Machine language seems quite simple on the surface, given that there 303 | are only zeros and ones, but its syntax is even more complex 304 | 8687 and far more intricate than Python. So very few programmers ever write 305 | machine language. Instead we build various translators to allow 306 | programmers to write in high-level languages like Python or JavaScript 307 | and these translators convert the programs to machine language for actual 308 | execution by the CPU. 309 | 310 | Since machine language is tied to the computer hardware, machine language 311 | is not portable across different types of hardware. Programs written in 312 | high-level languages can be moved between different computers by using a 313 | different interpreter on the new machine or recompiling the code to create 314 | a machine language version of the program for the new machine. 315 | 316 | These programming language translators fall into two general categories: 317 | (one) interpreters and (two) compilers. 318 | 7073 1865 7084 319 | An interpreter reads the source code of the program as written by the 320 | programmer, parses the source code, and interprets the instructions on the fly. 321 | Python is an interpreter and when we are running Python interactively, 322 | we can type a line of Python (a sentence) and Python processes it immediately 323 | and is ready for us to type another line of Python. 324 | 2923 63 325 | Some of the lines of Python tell Python that you want it to remember some 326 | value for later. We need to pick a name for that value to be remembered and 327 | we can use that symbolic name to retrieve the value later. We use the 328 | term variable to refer to the labels we use to refer to this stored data. 329 | 330 | In this example, we ask Python to remember the value six and use the label x 331 | so we can retrieve the value later. We verify that Python has actually remembered 332 | the value using x and multiply 333 | it by seven and put the newly computed value in y. Then we ask Python to print out 334 | 8824 the value currently in y. 335 | 1079 5801 5047 336 | Even though we are typing these commands into Python one line at a time, Python 337 | is treating them as an ordered sequence of statements with later statements able 338 | to retrieve data created in earlier statements. We are writing our first 339 | simple paragraph with four sentences in a logical and meaningful order. 340 | 5 341 | It is the nature of an interpreter to be able to have an interactive conversation 342 | as shown above. A compiler needs to be handed the entire program in a file, and then 343 | it runs a process to translate the high-level source code into machine language 344 | 2572 and then the compiler puts the resulting machine language into a file for later 345 | execution. 346 | 347 | If you have a Windows system, often these executable machine language programs have a 348 | suffix of .exe or .dll which stand for executable and dynamic link 349 | library respectively. In Linux and Macintosh, there is no suffix that uniquely marks 350 | a file as executable. 351 | 352 | If you were to open an executable file in a text editor, it would look 353 | completely crazy and be unreadable: 354 | 355 | It is not easy to read or write machine language, so it is nice that we have 356 | compilers that allow us to write in high-level 357 | languages like Python or C. 358 | 359 | Now at this point in our discussion of compilers and interpreters, you should 360 | be 5616 wondering 171 a 3062 bit about the Python interpreter itself. What language is 361 | 9552 it written in? Is it written in a compiled language? When we type 7655 362 | python, 829 what 6096 exactly 2312 is happening? 363 | 364 | The Python interpreter is written in a high-level language called C. 365 | You can look at the actual source code for the Python interpreter by 366 | going to www.python.org and working your way to their source code. 367 | So Python is a program itself and it is compiled into machine code. 368 | When you installed Python on your computer (or the vendor installed it), 369 | 6015 you copied a machine-code copy of the translated Python program onto your 7100 370 | system. In Windows, the executable machine code for Python itself is likely 371 | in a file. 372 | 373 | That is more than you really need to know to be a Python programmer, but 374 | sometimes it pays to answer those little nagging questions right at 375 | the beginning. 376 | 377 | Writing a program 378 | 379 | Typing commands into the Python interpreter is a great way to experiment 380 | with Python's features, but it is not recommended for solving more complex problems. 381 | 382 | When we want to write a program, 383 | we use a text editor to write the Python instructions into a file, 384 | which 9548 is 2727 called 1792 a script. By 385 | convention, Python scripts have names that end with .py. 386 | 387 | script 388 | 389 | To execute the script, you have to tell the Python interpreter 390 | the name of the file. In a Unix or Windows command window, 391 | you would type python hello.py as follows: 392 | 393 | We call the Python interpreter and tell it to read its source code from 394 | the file hello.py instead of prompting us for lines of Python code 395 | interactively. 396 | 397 | You will notice that there was no need to have quit() at the end of 398 | the Python program in the file. When Python is reading your source code 399 | from a file, it knows to stop when it reaches the end of the file. 400 | 401 | 8402 What is a program? 402 | 403 | The definition of a program at its most basic is a sequence 404 | of Python statements that have been crafted to do something. 405 | Even our simple hello.py script is a program. It is a one-line 406 | program and is not particularly useful, but in the strictest definition, 407 | it is a Python program. 408 | 409 | It might be easiest to understand what a program is by thinking about a problem 410 | that a program might be built to solve, and then looking at a program 411 | that would solve that problem. 412 | 413 | Lets say you are doing Social Computing research on Facebook posts and 414 | you are interested in the most frequently used word in a series of posts. 415 | You could print out the stream of Facebook posts and pore over the text 416 | looking for the most common word, but that would take a long time and be very 417 | mistake prone. You would be smart to write a Python program to handle the 418 | task quickly and accurately so you can spend the weekend doing something 419 | fun. 420 | 421 | For example, look at the following text about a clown and a car. Look at the 422 | text and figure out the most common word and how many times it occurs. 423 | 424 | Then imagine that you are doing this task looking at millions of lines of 425 | text. Frankly it would be quicker for you to learn Python and write a 426 | Python program to count the words than it would be to manually 427 | scan the words. 428 | 429 | The even better news is that I already came up with a simple program to 430 | find the most common word in a text file. I wrote it, 431 | tested it, and now I am giving it to you to use so you can save some time. 432 | 433 | You don't even need to know Python to use this program. You will need to get through 434 | Chapter ten of this book to fully understand the awesome Python techniques that were 435 | used to make the program. You are the end user, you simply use the program and marvel 436 | at its cleverness and how it saved you so much manual effort. 437 | You simply type the code 438 | into a file called words.py and run it or you download the source 439 | code from http://www.py4e.com/code3/ and run it. 440 | 441 | This is a good example of how Python and the Python language are acting as an intermediary 442 | between you (the end user) and me (the programmer). Python is a way for us to exchange useful 443 | instruction sequences (i.e., programs) in a common language that can be used by anyone who 444 | installs Python on their computer. So neither of us are talking to Python, 445 | instead we are communicating with each other through Python. 446 | 447 | The building blocks of programs 448 | 449 | In the next few chapters, we will learn more about the vocabulary, sentence structure, 450 | paragraph structure, and story structure of Python. We will learn about the powerful 451 | capabilities of Python and how to compose those capabilities together to create useful 452 | programs. 453 | 454 | There are some low-level conceptual patterns that we use to construct programs. These 455 | constructs are not just for Python programs, they are part of every programming language 456 | from machine language up to the high-level languages. 457 | 458 | description 459 | 460 | Get data from the outside world. This might be 461 | reading data from a file, or even some kind of sensor like 462 | a microphone or GPS. In our initial programs, our input will come from the user 463 | typing data on the keyboard. 464 | 465 | Display the results of the program on a screen 466 | or store them in a file or perhaps write them to a device like a 467 | speaker to play music or speak text. 468 | 469 | Perform statements one after 470 | another in the order they are encountered in the script. 471 | 472 | Check for certain conditions and 473 | then execute or skip a sequence of statements. 474 | 475 | Perform some set of statements 476 | repeatedly, usually with 477 | some variation. 478 | 479 | Write a set of instructions once and give them a name 480 | and then reuse those instructions as needed throughout your program. 481 | 482 | description 483 | 484 | It sounds almost too simple to be true, and of course it is never 485 | so simple. It is like saying that walking is simply 486 | putting one foot in front of the other. The art 487 | of writing a program is composing and weaving these 488 | basic elements together many times over to produce something 489 | that is useful to its users. 490 | 491 | The word counting program above directly uses all of 492 | these patterns except for one. 493 | 494 | What could possibly go wrong? 495 | 496 | As we saw in our earliest conversations with Python, we must 497 | communicate very precisely when we write Python code. The smallest 498 | deviation or mistake will cause Python to give up looking at your 499 | program. 500 | 501 | Beginning programmers often take the fact that Python leaves no 502 | room for errors as evidence that Python is mean, hateful, and cruel. 503 | While Python seems to like everyone else, Python knows them 504 | personally and holds a grudge against them. Because of this grudge, 505 | Python takes our perfectly written programs and rejects them as 506 | unfit just to torment us. 507 | 508 | There is little to be gained by arguing with Python. It is just a tool. 509 | It has no emotions and it is happy and ready to serve you whenever you 510 | need it. Its error messages sound harsh, but they are just Python's 511 | call for help. It has looked at what you typed, and it simply cannot 512 | understand what you have entered. 513 | 514 | Python is much more like a dog, loving you unconditionally, having a few 515 | key words that it understands, looking you with a sweet look on its 516 | face (>>>), and waiting for you to say something it understands. 517 | When Python says SyntaxError: invalid syntax, it is simply wagging 518 | its tail and saying, You seemed to say something but I just don't 519 | understand what you meant, but please keep talking to me (>>>). 520 | 521 | As your programs become increasingly sophisticated, you will encounter three 522 | general types of errors: 523 | 524 | description 525 | 526 | These are the first errors you will make and the easiest 527 | to fix. A syntax error means that you have violated the grammar rules of Python. 528 | Python does its best to point right at the line and character where 529 | it noticed it was confused. The only tricky bit of syntax errors is that sometimes 530 | the mistake that needs fixing is actually earlier in the program than where Python 531 | noticed it was confused. So the line and character that Python indicates in 532 | a syntax error may just be a starting point for your investigation. 533 | 534 | A logic error is when your program has good syntax but there is a mistake 535 | in the order of the statements or perhaps a mistake in how the statements relate to one another. 536 | A good example of a logic error might be, take a drink from your water bottle, put it 537 | in your backpack, walk to the library, and then put the top back on the bottle. 538 | 539 | A semantic error is when your description of the steps to take 540 | is syntactically perfect and in the right order, but there is simply a mistake in 541 | the program. The program is perfectly correct but it does not do what 542 | you intended for it to do. A simple example would 543 | be if you were giving a person directions to a restaurant and said, ...when you reach 544 | the intersection with the gas station, turn left and go one mile and the restaurant 545 | is a red building on your left. Your friend is very late and calls you to tell you that 546 | they are on a farm and walking around behind a barn, with no sign of a restaurant. 547 | Then you say did you turn left or right at the gas station? and 548 | they say, I followed your directions perfectly, I have 549 | them written down, it says turn left and go one mile at the gas station. Then you say, 550 | I am very sorry, because while my instructions were syntactically correct, they 551 | sadly contained a small but undetected semantic error.. 552 | 553 | description 554 | 555 | Again in all three types of errors, Python is merely trying its hardest to 556 | do exactly what you have asked. 557 | 558 | The learning journey 559 | 560 | As you progress through the rest of the book, don't be afraid if the concepts 561 | don't seem to fit together well the first time. When you were learning to speak, 562 | it was not a problem for your first few years that you just made cute gurgling noises. 563 | And it was OK if it took six months for you to move from simple vocabulary to 564 | simple sentences and took five or six more years to move from sentences to paragraphs, and a 565 | few more years to be able to write an interesting complete short story on your own. 566 | 567 | We want you to learn Python much more rapidly, so we teach it all at the same time 568 | over the next few chapters. 569 | But it is like learning a new language that takes time to absorb and understand 570 | before it feels natural. 571 | That leads to some confusion as we visit and revisit 572 | topics to try to get you to see the big picture while we are defining the tiny 573 | fragments that make up that big picture. While the book is written linearly, and 574 | if you are taking a course it will progress in a linear fashion, don't hesitate 575 | to be very nonlinear in how you approach the material. Look forwards and backwards 576 | and read with a light touch. By skimming more advanced material without 577 | fully understanding the details, you can get a better understanding of the why? 578 | of programming. By reviewing previous material and even redoing earlier 579 | exercises, you will realize that you actually learned a lot of material even 580 | if the material you are currently staring at seems a bit impenetrable. 581 | 582 | Usually when you are learning your first programming language, there are a few 583 | wonderful Ah Hah! moments where you can look up from pounding away at some rock 584 | with a hammer and chisel and step away and see that you are indeed building 585 | a beautiful sculpture. 586 | 587 | If something seems particularly hard, there is usually no value in staying up all 588 | night and staring at it. Take a break, take a nap, have a snack, explain what you 589 | are having a problem with to someone (or perhaps your dog), and then come back to it with 590 | fresh eyes. I assure you that once you learn the programming concepts in the book 591 | you will look back and see that it was all really easy and elegant and it simply 592 | took you a bit of time to absorb it. 593 | 42 594 | The end 595 | -------------------------------------------------------------------------------- /regex_sum_57123.txt: -------------------------------------------------------------------------------- 1 | This file contains the actual data for your assignment - good luck! 2 | 3 | 4 | Why should you learn to write programs? 5 | 6 | Writing programs (or programming) is a very creative 7 | and rewarding activity. You can write programs for 8 | many reasons, ranging from making your living to solving 9 | 2262 a difficult data analysis problem to having fun to helping 9487 10 | someone else solve a problem. This book assumes that 11 | everyone needs to know how to program, and that once 12 | you know how to program you will figure out what you want 13 | to do with your newfound skills. 14 | 15 | We are surrounded in our daily lives with computers ranging 16 | from laptops to cell phones. We can think of these computers 17 | as our personal assistants who can take care of many things 18 | on our behalf. The hardware in our current-day computers 19 | is essentially built to continuously ask us the question, 20 | What would you like me to do next? 21 | 22 | Programmers add an operating system and a set of applications 23 | to the hardware and we end up with a Personal Digital 24 | Assistant that is quite helpful and capable of helping 25 | us do many different things. 26 | 27 | Our computers are fast and have vast amounts of memory and 28 | could be very helpful to us if we only knew the language to 29 | speak to explain to the computer what we would like it to 30 | do next. If we knew this language, we could tell the 31 | computer to do tasks on our behalf that were repetitive. 32 | Interestingly, the kinds of things computers can do best 33 | are often the kinds of things that we humans find boring 34 | 5028 and mind-numbing. 7708 35 | 36 | For example, look at the first three paragraphs of this 37 | chapter and tell me the most commonly used word and how 38 | many times the word is used. While you were able to read 39 | and understand the words in a few seconds, counting them 40 | is almost painful because it is not the kind of problem 41 | that human minds are designed to solve. For a computer 42 | the opposite is true, reading and understanding text 43 | from a piece of paper is hard for a computer to do 44 | but counting the words and telling you how many times 45 | the most used word was used is very easy for the 46 | computer: 47 | 48 | 7358 Our personal information analysis assistant quickly 8494 49 | told us that the word to was used sixteen times in the 50 | first three paragraphs of this chapter. 51 | 6080 355 52 | This very fact that computers are good at things 53 | that humans are not is why you need to become 54 | 1743 skilled at talking computer language. Once you learn 55 | this new language, you can delegate mundane tasks 56 | to your partner (the computer), leaving more time 57 | for you to do the 58 | things that you are uniquely suited for. You bring 59 | 824 creativity, intuition, and inventiveness to this 2549 60 | partnership. 61 | 62 | Creativity and motivation 63 | 64 | While this book is not intended for professional programmers, professional 65 | programming can be a very rewarding job both financially and personally. 66 | Building useful, elegant, and clever programs for others to use is a very 67 | creative activity. Your computer or Personal Digital Assistant (PDA) 68 | usually contains many different programs from many different groups of 69 | programmers, each competing for your attention and interest. They try 70 | their best to meet your needs and give you a great user experience in the 71 | process. In some situations, when you choose a piece of software, the 72 | programmers are directly compensated because of your choice. 73 | 74 | If we think of programs as the creative output of groups of programmers, 75 | perhaps the following figure is a more sensible version of our PDA: 76 | 77 | For now, our primary motivation is not to make money or please end users, but 78 | instead for us to be more productive in handling the data and 79 | information that we will encounter in our lives. 80 | When you first start, you will be both the programmer and the end user of 81 | your programs. As you gain skill as a programmer and 82 | programming feels more creative to you, your thoughts may turn 83 | toward developing programs for others. 84 | 85 | Computer hardware architecture 86 | 87 | Before we start learning the language we 88 | speak to give instructions to computers to 89 | develop software, we need to learn a small amount about 90 | how computers are built. 91 | 7291 92 | Central Processing Unit (or CPU) is 93 | 657 the part of the computer that is built to be obsessed 6593 94 | with what is next? If your computer is rated 95 | at 2738 three 2842 Gigahertz, 6396 it means that the CPU will ask What next? 96 | three billion times per second. You are going to have to 97 | learn how to talk fast to keep up with the CPU. 98 | 99 | Main Memory is used to store information 100 | that the CPU needs in a hurry. The main memory is nearly as 101 | fast as the CPU. But the information stored in the main 102 | memory vanishes when the computer is turned off. 103 | 104 | Secondary 1464 Memory 6203 is 268 also used to store 105 | information, but it is much slower than the main memory. 106 | The advantage of the secondary memory is that it can 107 | 1780 store information even when there is no power to the 108 | computer. Examples of secondary memory are disk drives 109 | or flash memory (typically found in USB sticks and portable 110 | music players). 111 | 112 | Input and Output Devices are simply our 113 | screen, keyboard, mouse, microphone, speaker, touchpad, etc. 114 | They are all of the ways we interact with the computer. 115 | 116 | These days, most computers also have a 117 | Network Connection to retrieve information over a network. 118 | We can think of the network as a very slow place to store and 119 | retrieve data that might not always be up. So in a sense, 120 | the network is a slower and at times unreliable form of 121 | Secondary Memory. 122 | 123 | While most of the detail of how these components work is best left 124 | to computer builders, it helps to have some terminology 125 | so we can talk about these different parts as we write our programs. 126 | 127 | As a programmer, your job is to use and orchestrate 128 | each of these resources to solve the problem that you need to solve 129 | and analyze the data you get from the solution. As a programmer you will 130 | mostly be talking to the CPU and telling it what to 131 | do next. Sometimes you will tell the CPU to use the main memory, 132 | secondary memory, network, or the input/output devices. 133 | 134 | You need to be the person who answers the CPU's What next? 135 | question. But it would be very uncomfortable to shrink you 136 | down to five mm tall and insert you into the computer just so you 137 | could issue a command three billion times per second. So instead, 138 | you must write down your instructions in advance. 139 | We call these stored instructions a program and the act 140 | of writing these instructions down and getting the instructions to 141 | be correct programming. 142 | 143 | Understanding programming 144 | 145 | 2096 In the rest of this book, we will try to turn you into a person 9523 146 | who is skilled in the art of programming. In the end you will be a 147 | programmer --- perhaps not a professional programmer, but 148 | at least you will have the skills to look at a data/information 149 | analysis problem and develop a program to solve the problem. 150 | 151 | problem solving 152 | 153 | In a sense, you need two skills to be a programmer: 154 | 155 | First, you need to know the programming language (Python) - 156 | you need to know the vocabulary and the grammar. You need to be able 157 | to spell the words in this new language properly and know how to construct 158 | well-formed sentences in this new language. 159 | 160 | Second, you need to tell a story. In writing a story, 161 | you combine words and sentences to convey an idea to the reader. 162 | There is a skill and art in constructing the story, and skill in 163 | story writing is improved by doing some writing and getting some 164 | feedback. In programming, our program is the story and the 165 | problem you are trying to solve is the idea. 166 | 167 | itemize 168 | 169 | Once you learn one programming language such as Python, you will 170 | find it much easier to learn a second programming language such 171 | as JavaScript or C++. The new programming language has very different 172 | vocabulary and grammar but the problem-solving skills 173 | will be the same across all programming languages. 174 | 175 | 3039 You will learn the vocabulary and sentences of Python pretty quickly. 809 176 | It will take longer for you to be able to write a coherent program 177 | to solve a brand-new problem. We teach programming much like we teach 178 | 6451 writing. We start reading and explaining programs, then we write 179 | simple programs, and then we write increasingly complex programs over time. 180 | At some point you get your muse and see the patterns on your own 181 | and can see more naturally how to take a problem and 182 | write a program that solves that problem. And once you get 183 | to that point, programming becomes a very pleasant and creative process. 184 | 185 | We start with the vocabulary and structure of Python programs. Be patient 186 | as the simple examples remind you of when you started reading for the first 187 | time. 188 | 189 | Words and sentences 190 | 191 | Unlike human languages, the Python vocabulary is actually pretty small. 192 | We call this vocabulary the reserved words. These are words that 193 | have very special meaning to Python. When Python sees these words in 194 | a Python program, they have one and only one meaning to Python. Later 195 | as 1915 you 4048 write 4573 programs you will make up your own words that have meaning to 196 | you called variables. You will have great latitude in choosing 197 | your names for your variables, but you cannot use any of Python's 198 | reserved words as a name for a variable. 199 | 200 | When we train a dog, we use special words like 201 | sit, stay, and fetch. When you talk to a dog and 202 | don't use any of the reserved words, they just look at you with a 203 | quizzical look on their face until you say a reserved word. 204 | For example, if you say, 205 | I wish more people would walk to improve their overall health, 206 | what most dogs likely hear is, 207 | blah blah blah walk blah blah blah blah. 208 | That is because walk is a reserved word in dog language. 209 | 210 | The reserved words in the language where humans talk to 211 | Python include the following: 212 | 213 | and del from not while 214 | as elif global or with 215 | assert else if pass yield 216 | break except import print 217 | class exec in raise 218 | continue finally is return 219 | def for lambda try 220 | 221 | That is it, and unlike a dog, Python is already completely trained. 222 | When you say try, Python will try every time you say it without 223 | fail. 224 | 225 | We will learn these reserved words and how they are used in good time, 226 | but for now we will focus on the Python equivalent of speak (in 227 | human-to-dog language). The nice thing about telling Python to speak 228 | is that we can even tell it what to say by giving it a message in quotes: 229 | 230 | And we have even written our first syntactically correct Python sentence. 231 | 8509 Our sentence starts with the reserved word print followed 232 | by a string of text of our choosing enclosed in single quotes. 233 | 234 | Conversing with Python 235 | 236 | Now that we have a word and a simple sentence that we know in Python, 237 | we need to know how to start a conversation with Python to test 238 | our new language skills. 239 | 240 | Before you can converse with Python, you must first install the Python 241 | software on your computer and learn how to start Python on your 242 | computer. That is too much detail for this chapter so I suggest 243 | that you consult www.py4e.com where I have detailed 244 | instructions and screencasts of setting up and starting Python 245 | on Macintosh and Windows systems. At some point, you will be in 246 | a terminal or command window and you will type python and 247 | the Python interpreter will start executing in interactive mode 248 | and appear somewhat as follows: 249 | interactive mode 250 | 251 | The >>> prompt is the Python interpreter's way of asking you, What 252 | do you want me to do next? Python is ready to have a conversation with 253 | you. All you have to know is how to speak the Python language. 254 | 255 | 2142 Let's say for example that you did not know even the simplest Python language 256 | words or sentences. You might want to use the standard line that astronauts 257 | use when they land on a faraway planet and try to speak with the inhabitants 258 | of the planet: 259 | 260 | 4022 This is not going so well. Unless you think of something quickly, 261 | the inhabitants of the planet are likely to stab you with their spears, 262 | put you on a spit, roast you over a fire, and eat you for dinner. 263 | 264 | At this point, you should also realize that while Python 265 | is amazingly complex and powerful and very picky about 266 | the syntax you use to communicate with it, Python is 267 | not intelligent. You are really just having a conversation 268 | with yourself, but using proper syntax. 269 | 270 | In a sense, when you use a program written by someone else 271 | the conversation is between you and those other 272 | programmers with Python acting as an intermediary. Python 273 | is a way for the creators of programs to express how the 274 | conversation is supposed to proceed. And 275 | in just a few more chapters, you will be one of those 276 | programmers using Python to talk to the users of your program. 277 | 278 | Before we leave our first conversation with the Python 279 | interpreter, you should probably know the proper way 280 | to say good-bye when interacting with the inhabitants 281 | of Planet Python: 282 | 283 | You will notice that the error is different for the first two 284 | 3114 incorrect attempts. The second error is different because 285 | if is a reserved word and Python saw the reserved word 286 | and thought we were trying to say something but got the syntax 287 | of the sentence wrong. 288 | 289 | Terminology: interpreter and compiler 290 | 291 | Python is a high-level language intended to be relatively 292 | straightforward for humans to read and write and for computers 293 | to read and process. Other high-level languages include Java, C++, 294 | PHP, Ruby, Basic, Perl, JavaScript, and many more. The actual hardware 295 | inside the Central Processing Unit (CPU) does not understand any 296 | of these high-level languages. 297 | 298 | The CPU understands a language we call machine language. Machine 299 | language is very simple and frankly very tiresome to write because it 300 | is represented all in zeros and ones. 301 | 302 | Machine language seems quite simple on the surface, given that there 303 | are only zeros and ones, but its syntax is even more complex 304 | and far more intricate than Python. So very few programmers ever write 305 | machine language. Instead we build various translators to allow 306 | programmers to write in high-level languages like Python or JavaScript 307 | and these translators convert the programs to machine language for actual 308 | execution by the CPU. 309 | 3419 310 | Since machine language is tied to the computer hardware, machine language 311 | is not portable across different types of hardware. Programs written in 312 | high-level languages can be moved between different computers by using a 313 | different interpreter on the new machine or recompiling the code to create 314 | a machine language version of the program for the new machine. 315 | 316 | These programming language translators fall into two general categories: 317 | (one) interpreters and (two) compilers. 318 | 319 | An interpreter reads the source code of the program as written by the 320 | programmer, parses the source code, and interprets the instructions on the fly. 321 | Python is an interpreter and when we are running Python interactively, 322 | we can type a line of Python (a sentence) and Python processes it immediately 323 | 8755 and is ready for us to type another line of Python. 324 | 325 | Some of the lines of Python tell Python that you want it to remember some 326 | value for later. We need to pick a name for that value to be remembered and 327 | we can use that symbolic name to retrieve the value later. We use the 328 | term variable to refer to the labels we use to refer to this stored data. 329 | 330 | In this example, we ask Python to remember the value six and use the label x 331 | so we can retrieve the value later. We verify that Python has actually remembered 332 | the value using x and multiply 333 | it by seven and put the newly computed value in y. Then we ask Python to print out 334 | the value currently in y. 335 | 336 | Even though we are typing these commands into Python one line at a time, Python 337 | is treating them as an ordered sequence of statements with later statements able 338 | to retrieve data created in earlier statements. We are writing our first 339 | simple paragraph with four sentences in a logical and meaningful order. 340 | 341 | 9013 It is the nature of an interpreter to be able to have an interactive conversation 5602 342 | as shown above. A compiler needs to be handed the entire program in a file, and then 343 | it runs a process to translate the high-level source code into machine language 344 | and then the compiler puts the resulting machine language into a file for later 345 | execution. 346 | 347 | If you have a Windows system, often these executable machine language programs have a 348 | 3152 suffix of .exe or .dll which stand for executable and dynamic link 349 | library respectively. In Linux and Macintosh, there is no suffix that uniquely marks 350 | a file as executable. 351 | 352 | If you were to open an executable file in a text editor, it would look 353 | completely crazy and be unreadable: 354 | 355 | It is not easy to read or write machine language, so it is nice that we have 356 | compilers that allow us to write in high-level 357 | languages like Python or C. 358 | 359 | Now at this point in our discussion of compilers and interpreters, you should 360 | be wondering a bit about the Python interpreter itself. What language is 361 | it written in? Is it written in a compiled language? When we type 362 | python, what exactly is happening? 363 | 364 | The Python interpreter is written in a high-level language called C. 365 | You can look at the actual source code for the Python interpreter by 366 | going to www.python.org and working your way to their source code. 367 | So Python is a program itself and it is compiled into machine code. 368 | When you installed Python on your computer (or the vendor installed it), 369 | you copied a machine-code copy of the translated Python program onto your 370 | system. In Windows, the executable machine code for Python itself is likely 371 | in a file. 372 | 373 | That is more than you really need to know to be a Python programmer, but 374 | sometimes it pays to answer those little nagging questions right at 375 | the beginning. 376 | 377 | Writing a program 378 | 379 | Typing commands into the Python interpreter is a great way to experiment 380 | with Python's features, but it is not recommended for solving more complex problems. 381 | 382 | When we want to write a program, 383 | we use a text editor to write the Python instructions into a file, 384 | which is called a script. By 385 | convention, Python scripts have names that end with .py. 386 | 387 | 9331 script 388 | 389 | To execute the script, you have to tell the Python interpreter 390 | the name of the file. In a Unix or Windows command window, 391 | you would type python hello.py as follows: 392 | 3397 2086 7197 393 | We call the Python interpreter and tell it to read its source code from 394 | the file hello.py instead of prompting us for lines of Python code 395 | interactively. 396 | 814 397 | 5834 You will notice that there was no need to have quit() at the end of 6546 398 | the Python program in the file. When Python is reading your source code 399 | from a file, it knows to stop when it reaches the end of the file. 400 | 401 | What is a program? 402 | 403 | The definition of a program at its most basic is a sequence 404 | of Python statements that have been crafted to do something. 405 | Even our simple hello.py script is a program. It is a one-line 406 | program and is not particularly useful, but in the strictest definition, 407 | it is a Python program. 408 | 409 | It might be easiest to understand what a program is by thinking about a problem 410 | that a program might be built to solve, and then looking at a program 411 | that would solve that problem. 412 | 413 | Lets say you are doing Social Computing research on Facebook posts and 414 | you are interested in the most frequently used word in a series of posts. 415 | You could print out the stream of Facebook posts and pore over the text 416 | looking for the most common word, but that would take a long time and be very 417 | mistake prone. You would be smart to write a Python program to handle the 418 | task quickly and accurately so you can spend the weekend doing something 419 | fun. 420 | 421 | For example, look at the following text about a clown and a car. Look at the 422 | text and figure out the most common word and how many times it occurs. 423 | 424 | Then imagine that you are doing this task looking at millions of lines of 425 | text. Frankly it would be quicker for you to learn Python and write a 426 | Python program to count the words than it would be to manually 427 | scan the words. 428 | 429 | The even better news is that I already came up with a simple program to 430 | find the most common word in a text file. I wrote it, 431 | tested it, and now I am giving it to you to use so you can save some time. 432 | 433 | You don't even need to know Python to use this program. You will need to get through 434 | Chapter ten of this book to fully understand the awesome Python techniques that were 435 | used to make the program. You are the end user, you simply use the program and marvel 436 | at its cleverness and how it saved you so much manual effort. 437 | You simply type the code 438 | into a file called words.py and run it or you download the source 439 | code from http://www.py4e.com/code3/ and run it. 440 | 441 | This is a good example of how Python and the Python language are acting as an intermediary 442 | between you (the end user) and me (the programmer). Python is a way for us to exchange useful 443 | instruction sequences (i.e., programs) in a common language that can be used by anyone who 444 | installs Python on their computer. So neither of us are talking to Python, 445 | instead we are communicating with each other through Python. 446 | 447 | The building blocks of programs 448 | 449 | In the next few chapters, we will learn more about the vocabulary, sentence structure, 450 | paragraph structure, and story structure of Python. We will learn about the powerful 451 | capabilities of Python and how to compose those capabilities together to create useful 452 | programs. 453 | 454 | There are some low-level conceptual patterns that we use to construct programs. These 455 | constructs are not just for Python programs, they are part of every programming language 456 | from machine language up to the high-level languages. 457 | 458 | description 459 | 460 | Get data from the outside world. This might be 461 | reading data from a file, or even some kind of sensor like 462 | a microphone or GPS. In our initial programs, our input will come from the user 463 | typing data on the keyboard. 464 | 465 | Display the results of the program on a screen 466 | or store them in a file or perhaps write them to a device like a 467 | speaker to play music or speak text. 468 | 469 | Perform statements one after 470 | another in the order they are encountered in the script. 471 | 472 | Check for certain conditions and 473 | then execute or skip a sequence of statements. 474 | 475 | Perform some set of statements 476 | repeatedly, usually with 477 | some variation. 478 | 479 | Write a set of instructions once and give them a name 480 | and then reuse those instructions as needed throughout your program. 481 | 482 | description 483 | 484 | It sounds almost too simple to be true, and of course it is never 485 | so simple. It is like saying that walking is simply 486 | putting one foot in front of the other. The art 487 | of writing a program is composing and weaving these 488 | basic elements together many times over to produce something 489 | that is useful to its users. 490 | 491 | The word counting program above directly uses all of 492 | these patterns except for one. 493 | 494 | What could possibly go wrong? 495 | 496 | As we saw in our earliest conversations with Python, we must 497 | communicate very precisely when we write Python code. The smallest 498 | deviation or mistake will cause Python to give up looking at your 499 | program. 500 | 501 | Beginning programmers often take the fact that Python leaves no 502 | room for errors as evidence that Python is mean, hateful, and cruel. 503 | While Python seems to like everyone else, Python knows them 504 | personally and holds a grudge against them. Because of this grudge, 505 | Python takes our perfectly written programs and rejects them as 506 | unfit just to torment us. 507 | 508 | There is little to be gained by arguing with Python. It is just a tool. 509 | It has no emotions and it is happy and ready to serve you whenever you 510 | need it. Its error messages sound harsh, but they are just Python's 511 | call for help. It has looked at what you typed, and it simply cannot 512 | understand what you have entered. 513 | 514 | Python is much more like a dog, loving you unconditionally, having a few 515 | key words that it understands, looking you with a sweet look on its 516 | face (>>>), and waiting for you to say something it understands. 517 | When Python says SyntaxError: invalid syntax, it is simply wagging 518 | its tail and saying, You seemed to say something but I just don't 519 | understand what you meant, but please keep talking to me (>>>). 520 | 521 | As your programs become increasingly sophisticated, you will encounter three 522 | general types of errors: 523 | 524 | description 525 | 526 | These are the first errors you will make and the easiest 527 | to fix. A syntax error means that you have violated the grammar rules of Python. 528 | Python does its best to point right at the line and character where 529 | it noticed it was confused. The only tricky bit of syntax errors is that sometimes 530 | the mistake that needs fixing is actually earlier in the program than where Python 531 | noticed it was confused. So the line and character that Python indicates in 532 | a syntax error may just be a starting point for your investigation. 533 | 534 | A logic error is when your program has good syntax but there is a mistake 535 | in the order of the statements or perhaps a mistake in how the statements relate to one another. 536 | A good example of a logic error might be, take a drink from your water bottle, put it 537 | in your backpack, walk to the library, and then put the top back on the bottle. 538 | 539 | A semantic error is when your description of the steps to take 540 | is syntactically perfect and in the right order, but there is simply a mistake in 541 | the program. The program is perfectly correct but it does not do what 542 | you intended for it to do. A simple example would 543 | be if you were giving a person directions to a restaurant and said, ...when you reach 544 | the intersection with the gas station, turn left and go one mile and the restaurant 545 | is a red building on your left. Your friend is very late and calls you to tell you that 546 | they are on a farm and walking around behind a barn, with no sign of a restaurant. 547 | Then you say did you turn left or right at the gas station? and 548 | they say, I followed your directions perfectly, I have 549 | them written down, it says turn left and go one mile at the gas station. Then you say, 550 | I am very sorry, because while my instructions were syntactically correct, they 551 | sadly contained a small but undetected semantic error.. 552 | 553 | description 554 | 555 | Again in all three types of errors, Python is merely trying its hardest to 556 | do exactly what you have asked. 557 | 558 | The learning journey 559 | 560 | As you progress through the rest of the book, don't be afraid if the concepts 561 | don't seem to fit together well the first time. When you were learning to speak, 562 | it was not a problem for your first few years that you just made cute gurgling noises. 563 | And it was OK if it took six months for you to move from simple vocabulary to 564 | simple sentences and took five or six more years to move from sentences to paragraphs, and a 565 | few more years to be able to write an interesting complete short story on your own. 566 | 567 | We want you to learn Python much more rapidly, so we teach it all at the same time 568 | over the next few chapters. 569 | But it is like learning a new language that takes time to absorb and understand 570 | before it feels natural. 571 | That leads to some confusion as we visit and revisit 572 | topics to try to get you to see the big picture while we are defining the tiny 573 | fragments that make up that big picture. While the book is written linearly, and 574 | if you are taking a course it will progress in a linear fashion, don't hesitate 575 | to be very nonlinear in how you approach the material. Look forwards and backwards 576 | and read with a light touch. By skimming more advanced material without 577 | fully understanding the details, you can get a better understanding of the why? 578 | of programming. By reviewing previous material and even redoing earlier 579 | exercises, you will realize that you actually learned a lot of material even 580 | if the material you are currently staring at seems a bit impenetrable. 581 | 582 | Usually when you are learning your first programming language, there are a few 583 | wonderful Ah Hah! moments where you can look up from pounding away at some rock 584 | with a hammer and chisel and step away and see that you are indeed building 585 | a beautiful sculpture. 586 | 587 | If something seems particularly hard, there is usually no value in staying up all 588 | night and staring at it. Take a break, take a nap, have a snack, explain what you 589 | are having a problem with to someone (or perhaps your dog), and then come back to it with 590 | fresh eyes. I assure you that once you learn the programming concepts in the book 591 | you will look back and see that it was all really easy and elegant and it simply 592 | took you a bit of time to absorb it. 593 | 42 594 | The end 595 | -------------------------------------------------------------------------------- /romeo.txt: -------------------------------------------------------------------------------- 1 | But soft what light through yonder window breaks 2 | It is the east and Juliet is the sun 3 | Arise fair sun and kill the envious moon 4 | Who is already sick and pale with grief -------------------------------------------------------------------------------- /roster_data.json: -------------------------------------------------------------------------------- 1 | [ 2 | [ 3 | "Oscar", 4 | "si110", 5 | 1 6 | ], 7 | [ 8 | "Akira", 9 | "si110", 10 | 0 11 | ], 12 | [ 13 | "Griffyn", 14 | "si110", 15 | 0 16 | ], 17 | [ 18 | "Oluwatamilore", 19 | "si110", 20 | 0 21 | ], 22 | [ 23 | "Peiyan", 24 | "si110", 25 | 0 26 | ], 27 | [ 28 | "Preet", 29 | "si110", 30 | 0 31 | ], 32 | [ 33 | "Gracie", 34 | "si110", 35 | 0 36 | ], 37 | [ 38 | "Elita", 39 | "si110", 40 | 0 41 | ], 42 | [ 43 | "Chrislyn", 44 | "si110", 45 | 0 46 | ], 47 | [ 48 | "Rahman", 49 | "si110", 50 | 0 51 | ], 52 | [ 53 | "Natane", 54 | "si110", 55 | 0 56 | ], 57 | [ 58 | "Malakai", 59 | "si110", 60 | 0 61 | ], 62 | [ 63 | "Faryn", 64 | "si110", 65 | 0 66 | ], 67 | [ 68 | "Pedram", 69 | "si110", 70 | 0 71 | ], 72 | [ 73 | "Maisum", 74 | "si110", 75 | 0 76 | ], 77 | [ 78 | "Marcella", 79 | "si110", 80 | 0 81 | ], 82 | [ 83 | "Maariyah", 84 | "si110", 85 | 0 86 | ], 87 | [ 88 | "Prabhasees", 89 | "si110", 90 | 0 91 | ], 92 | [ 93 | "Braydon", 94 | "si110", 95 | 0 96 | ], 97 | [ 98 | "Dinaras", 99 | "si110", 100 | 0 101 | ], 102 | [ 103 | "Bonni", 104 | "si110", 105 | 0 106 | ], 107 | [ 108 | "Roberta", 109 | "si110", 110 | 0 111 | ], 112 | [ 113 | "Sherese", 114 | "si110", 115 | 0 116 | ], 117 | [ 118 | "Alasdair", 119 | "si110", 120 | 0 121 | ], 122 | [ 123 | "Narvic", 124 | "si110", 125 | 0 126 | ], 127 | [ 128 | "Evelynne", 129 | "si110", 130 | 0 131 | ], 132 | [ 133 | "Sali", 134 | "si110", 135 | 0 136 | ], 137 | [ 138 | "Tay", 139 | "si110", 140 | 0 141 | ], 142 | [ 143 | "Inemesit", 144 | "si110", 145 | 0 146 | ], 147 | [ 148 | "Yva", 149 | "si110", 150 | 0 151 | ], 152 | [ 153 | "Kristin", 154 | "si106", 155 | 1 156 | ], 157 | [ 158 | "Cassandra", 159 | "si106", 160 | 0 161 | ], 162 | [ 163 | "Windsor", 164 | "si106", 165 | 0 166 | ], 167 | [ 168 | "Will", 169 | "si106", 170 | 0 171 | ], 172 | [ 173 | "Aleah", 174 | "si106", 175 | 0 176 | ], 177 | [ 178 | "Caisey", 179 | "si106", 180 | 0 181 | ], 182 | [ 183 | "Kareena", 184 | "si106", 185 | 0 186 | ], 187 | [ 188 | "Kyan", 189 | "si106", 190 | 0 191 | ], 192 | [ 193 | "April", 194 | "si106", 195 | 0 196 | ], 197 | [ 198 | "Ash", 199 | "si106", 200 | 0 201 | ], 202 | [ 203 | "Fabian", 204 | "si106", 205 | 0 206 | ], 207 | [ 208 | "Lina", 209 | "si106", 210 | 0 211 | ], 212 | [ 213 | "Emillie", 214 | "si106", 215 | 0 216 | ], 217 | [ 218 | "Melica", 219 | "si106", 220 | 0 221 | ], 222 | [ 223 | "Orlando", 224 | "si106", 225 | 0 226 | ], 227 | [ 228 | "Alice", 229 | "si106", 230 | 0 231 | ], 232 | [ 233 | "Mabruka", 234 | "si106", 235 | 0 236 | ], 237 | [ 238 | "Teiyib", 239 | "si106", 240 | 0 241 | ], 242 | [ 243 | "Darach", 244 | "si106", 245 | 0 246 | ], 247 | [ 248 | "Maizy", 249 | "si106", 250 | 0 251 | ], 252 | [ 253 | "Mantej", 254 | "si106", 255 | 0 256 | ], 257 | [ 258 | "Abhia", 259 | "si106", 260 | 0 261 | ], 262 | [ 263 | "Kayden", 264 | "si106", 265 | 0 266 | ], 267 | [ 268 | "Gillian", 269 | "si106", 270 | 0 271 | ], 272 | [ 273 | "Lachlan", 274 | "si106", 275 | 0 276 | ], 277 | [ 278 | "Harvie", 279 | "si106", 280 | 0 281 | ], 282 | [ 283 | "Kainin", 284 | "si106", 285 | 0 286 | ], 287 | [ 288 | "Bayleigh", 289 | "si106", 290 | 0 291 | ], 292 | [ 293 | "Qandeel", 294 | "si106", 295 | 0 296 | ], 297 | [ 298 | "Reo", 299 | "si106", 300 | 0 301 | ], 302 | [ 303 | "Mali", 304 | "si106", 305 | 0 306 | ], 307 | [ 308 | "Lavena", 309 | "si106", 310 | 0 311 | ], 312 | [ 313 | "Buddy", 314 | "si106", 315 | 0 316 | ], 317 | [ 318 | "Dillan", 319 | "si106", 320 | 0 321 | ], 322 | [ 323 | "Bethlin", 324 | "si106", 325 | 0 326 | ], 327 | [ 328 | "Carlos", 329 | "si106", 330 | 0 331 | ], 332 | [ 333 | "Geraldine", 334 | "si106", 335 | 0 336 | ], 337 | [ 338 | "Jannat", 339 | "si106", 340 | 0 341 | ], 342 | [ 343 | "Rihanna", 344 | "si106", 345 | 0 346 | ], 347 | [ 348 | "Rea", 349 | "si106", 350 | 0 351 | ], 352 | [ 353 | "Afton", 354 | "si106", 355 | 0 356 | ], 357 | [ 358 | "Shaunpaul", 359 | "si106", 360 | 0 361 | ], 362 | [ 363 | "Otilija", 364 | "si106", 365 | 0 366 | ], 367 | [ 368 | "Kaitlynn", 369 | "si206", 370 | 1 371 | ], 372 | [ 373 | "Emma", 374 | "si206", 375 | 0 376 | ], 377 | [ 378 | "Dylin", 379 | "si206", 380 | 0 381 | ], 382 | [ 383 | "Macaully", 384 | "si206", 385 | 0 386 | ], 387 | [ 388 | "Zehra", 389 | "si206", 390 | 0 391 | ], 392 | [ 393 | "Keren", 394 | "si206", 395 | 0 396 | ], 397 | [ 398 | "Eassan", 399 | "si206", 400 | 0 401 | ], 402 | [ 403 | "Ewan", 404 | "si206", 405 | 0 406 | ], 407 | [ 408 | "Sidney", 409 | "si206", 410 | 0 411 | ], 412 | [ 413 | "Alasdair", 414 | "si206", 415 | 0 416 | ], 417 | [ 418 | "Justinas", 419 | "si206", 420 | 0 421 | ], 422 | [ 423 | "Pacey", 424 | "si206", 425 | 0 426 | ], 427 | [ 428 | "Nairne", 429 | "si206", 430 | 0 431 | ], 432 | [ 433 | "Mueez", 434 | "si206", 435 | 0 436 | ], 437 | [ 438 | "Hadji", 439 | "si206", 440 | 0 441 | ], 442 | [ 443 | "Leanna", 444 | "si206", 445 | 0 446 | ], 447 | [ 448 | "Cooper", 449 | "si206", 450 | 0 451 | ], 452 | [ 453 | "Kaidey", 454 | "si206", 455 | 0 456 | ], 457 | [ 458 | "Kelsay", 459 | "si206", 460 | 0 461 | ], 462 | [ 463 | "Aiva", 464 | "si206", 465 | 0 466 | ], 467 | [ 468 | "Kahlan", 469 | "si206", 470 | 0 471 | ], 472 | [ 473 | "Kylan", 474 | "si206", 475 | 0 476 | ], 477 | [ 478 | "Lois", 479 | "si206", 480 | 0 481 | ], 482 | [ 483 | "Kashif", 484 | "si206", 485 | 0 486 | ], 487 | [ 488 | "Saanvi", 489 | "si206", 490 | 0 491 | ], 492 | [ 493 | "Jeannie", 494 | "si206", 495 | 0 496 | ], 497 | [ 498 | "Jaya", 499 | "si206", 500 | 0 501 | ], 502 | [ 503 | "Hanania", 504 | "si206", 505 | 0 506 | ], 507 | [ 508 | "Micall", 509 | "si206", 510 | 0 511 | ], 512 | [ 513 | "Keri", 514 | "si206", 515 | 0 516 | ], 517 | [ 518 | "Raphael", 519 | "si206", 520 | 0 521 | ], 522 | [ 523 | "Danyal", 524 | "si206", 525 | 0 526 | ], 527 | [ 528 | "Billy", 529 | "si206", 530 | 0 531 | ], 532 | [ 533 | "Orrick", 534 | "si206", 535 | 0 536 | ], 537 | [ 538 | "Yasmin", 539 | "si206", 540 | 0 541 | ], 542 | [ 543 | "Geoffrey", 544 | "si206", 545 | 0 546 | ], 547 | [ 548 | "Sheignneth", 549 | "si206", 550 | 0 551 | ], 552 | [ 553 | "Ian", 554 | "si206", 555 | 0 556 | ], 557 | [ 558 | "Owais", 559 | "si206", 560 | 0 561 | ], 562 | [ 563 | "Kaleigh", 564 | "si206", 565 | 0 566 | ], 567 | [ 568 | "Rhy", 569 | "si206", 570 | 0 571 | ], 572 | [ 573 | "Malina", 574 | "si206", 575 | 0 576 | ], 577 | [ 578 | "Caolain", 579 | "si206", 580 | 0 581 | ], 582 | [ 583 | "Cecily", 584 | "si206", 585 | 0 586 | ], 587 | [ 588 | "Yadgor", 589 | "si206", 590 | 0 591 | ], 592 | [ 593 | "Salahudin", 594 | "si206", 595 | 0 596 | ], 597 | [ 598 | "Caethan", 599 | "si206", 600 | 0 601 | ], 602 | [ 603 | "Islay", 604 | "si206", 605 | 0 606 | ], 607 | [ 608 | "Storm", 609 | "si206", 610 | 0 611 | ], 612 | [ 613 | "Nikita", 614 | "si206", 615 | 0 616 | ], 617 | [ 618 | "Muryam", 619 | "si206", 620 | 0 621 | ], 622 | [ 623 | "Katelyne", 624 | "si206", 625 | 0 626 | ], 627 | [ 628 | "Khaya", 629 | "si206", 630 | 0 631 | ], 632 | [ 633 | "Torin", 634 | "si301", 635 | 1 636 | ], 637 | [ 638 | "Laurence", 639 | "si301", 640 | 0 641 | ], 642 | [ 643 | "Gaia", 644 | "si301", 645 | 0 646 | ], 647 | [ 648 | "Derrin", 649 | "si301", 650 | 0 651 | ], 652 | [ 653 | "Kristen", 654 | "si301", 655 | 0 656 | ], 657 | [ 658 | "Lomond", 659 | "si301", 660 | 0 661 | ], 662 | [ 663 | "Alleisha", 664 | "si301", 665 | 0 666 | ], 667 | [ 668 | "Emmajane", 669 | "si301", 670 | 0 671 | ], 672 | [ 673 | "Roman", 674 | "si301", 675 | 0 676 | ], 677 | [ 678 | "Dawud", 679 | "si301", 680 | 0 681 | ], 682 | [ 683 | "Bryoni", 684 | "si301", 685 | 0 686 | ], 687 | [ 688 | "Mehreen", 689 | "si301", 690 | 0 691 | ], 692 | [ 693 | "Klein", 694 | "si301", 695 | 0 696 | ], 697 | [ 698 | "Suzi", 699 | "si301", 700 | 0 701 | ], 702 | [ 703 | "Xanthia", 704 | "si301", 705 | 0 706 | ], 707 | [ 708 | "Cherelle", 709 | "si301", 710 | 0 711 | ], 712 | [ 713 | "Isaiah", 714 | "si301", 715 | 0 716 | ], 717 | [ 718 | "Jazeb", 719 | "si301", 720 | 0 721 | ], 722 | [ 723 | "Dale", 724 | "si301", 725 | 0 726 | ], 727 | [ 728 | "Maira", 729 | "si301", 730 | 0 731 | ], 732 | [ 733 | "Silas", 734 | "si301", 735 | 0 736 | ], 737 | [ 738 | "Austen", 739 | "si301", 740 | 0 741 | ], 742 | [ 743 | "Takira", 744 | "si301", 745 | 0 746 | ], 747 | [ 748 | "Lawson", 749 | "si301", 750 | 0 751 | ], 752 | [ 753 | "Dora", 754 | "si301", 755 | 0 756 | ], 757 | [ 758 | "Wylie", 759 | "si301", 760 | 0 761 | ], 762 | [ 763 | "Lillia", 764 | "si301", 765 | 0 766 | ], 767 | [ 768 | "Titi", 769 | "si301", 770 | 0 771 | ], 772 | [ 773 | "Eduards", 774 | "si301", 775 | 0 776 | ], 777 | [ 778 | "Dacia", 779 | "si301", 780 | 0 781 | ], 782 | [ 783 | "Peter", 784 | "si301", 785 | 0 786 | ], 787 | [ 788 | "Breanna", 789 | "si301", 790 | 0 791 | ], 792 | [ 793 | "Charlie", 794 | "si301", 795 | 0 796 | ], 797 | [ 798 | "Kiyaleigh", 799 | "si301", 800 | 0 801 | ], 802 | [ 803 | "Declyn", 804 | "si301", 805 | 0 806 | ], 807 | [ 808 | "Myles", 809 | "si310", 810 | 1 811 | ], 812 | [ 813 | "Sai", 814 | "si310", 815 | 0 816 | ], 817 | [ 818 | "Bjorn", 819 | "si310", 820 | 0 821 | ], 822 | [ 823 | "Bryn", 824 | "si310", 825 | 0 826 | ], 827 | [ 828 | "Awais", 829 | "si310", 830 | 0 831 | ], 832 | [ 833 | "Reagan", 834 | "si310", 835 | 0 836 | ], 837 | [ 838 | "Islah", 839 | "si310", 840 | 0 841 | ], 842 | [ 843 | "Nyla", 844 | "si310", 845 | 0 846 | ], 847 | [ 848 | "Ruaridh", 849 | "si310", 850 | 0 851 | ], 852 | [ 853 | "Leno", 854 | "si310", 855 | 0 856 | ], 857 | [ 858 | "Sebastien", 859 | "si310", 860 | 0 861 | ], 862 | [ 863 | "Kiara", 864 | "si310", 865 | 0 866 | ], 867 | [ 868 | "Haadiyah", 869 | "si310", 870 | 0 871 | ], 872 | [ 873 | "Jabin", 874 | "si310", 875 | 0 876 | ], 877 | [ 878 | "Maeya", 879 | "si310", 880 | 0 881 | ], 882 | [ 883 | "Iyanuoluwa", 884 | "si310", 885 | 0 886 | ], 887 | [ 888 | "Aoibheann", 889 | "si310", 890 | 0 891 | ], 892 | [ 893 | "Dubhlinn", 894 | "si310", 895 | 0 896 | ], 897 | [ 898 | "Prabhjot", 899 | "si310", 900 | 0 901 | ], 902 | [ 903 | "Lyla", 904 | "si310", 905 | 0 906 | ], 907 | [ 908 | "Gemmalea", 909 | "si310", 910 | 0 911 | ], 912 | [ 913 | "Teos", 914 | "si310", 915 | 0 916 | ], 917 | [ 918 | "Marcy", 919 | "si310", 920 | 0 921 | ], 922 | [ 923 | "Jody", 924 | "si310", 925 | 0 926 | ], 927 | [ 928 | "Kerrie", 929 | "si310", 930 | 0 931 | ], 932 | [ 933 | "Nialla", 934 | "si310", 935 | 0 936 | ], 937 | [ 938 | "Koushik", 939 | "si310", 940 | 0 941 | ], 942 | [ 943 | "Robbie", 944 | "si310", 945 | 0 946 | ], 947 | [ 948 | "Teigon", 949 | "si310", 950 | 0 951 | ], 952 | [ 953 | "Brendon", 954 | "si310", 955 | 0 956 | ], 957 | [ 958 | "Manas", 959 | "si310", 960 | 0 961 | ], 962 | [ 963 | "Jaida", 964 | "si310", 965 | 0 966 | ], 967 | [ 968 | "Data", 969 | "si310", 970 | 0 971 | ], 972 | [ 973 | "Lagan", 974 | "si334", 975 | 1 976 | ], 977 | [ 978 | "Griffin", 979 | "si334", 980 | 0 981 | ], 982 | [ 983 | "Fionnah", 984 | "si334", 985 | 0 986 | ], 987 | [ 988 | "Nazlijan", 989 | "si334", 990 | 0 991 | ], 992 | [ 993 | "Tiffany", 994 | "si334", 995 | 0 996 | ], 997 | [ 998 | "Eren", 999 | "si334", 1000 | 0 1001 | ], 1002 | [ 1003 | "Reiah", 1004 | "si334", 1005 | 0 1006 | ], 1007 | [ 1008 | "Tanvir", 1009 | "si334", 1010 | 0 1011 | ], 1012 | [ 1013 | "Ifunanya", 1014 | "si334", 1015 | 0 1016 | ], 1017 | [ 1018 | "Codie", 1019 | "si334", 1020 | 0 1021 | ], 1022 | [ 1023 | "Tia", 1024 | "si334", 1025 | 0 1026 | ], 1027 | [ 1028 | "Silvana", 1029 | "si334", 1030 | 0 1031 | ], 1032 | [ 1033 | "Kajally", 1034 | "si334", 1035 | 0 1036 | ], 1037 | [ 1038 | "Constance", 1039 | "si334", 1040 | 0 1041 | ], 1042 | [ 1043 | "Kie", 1044 | "si334", 1045 | 0 1046 | ], 1047 | [ 1048 | "Nicolas", 1049 | "si334", 1050 | 0 1051 | ], 1052 | [ 1053 | "Hadjar", 1054 | "si334", 1055 | 0 1056 | ], 1057 | [ 1058 | "Albie", 1059 | "si334", 1060 | 0 1061 | ], 1062 | [ 1063 | "Charleigh", 1064 | "si334", 1065 | 0 1066 | ], 1067 | [ 1068 | "Nihaal", 1069 | "si334", 1070 | 0 1071 | ], 1072 | [ 1073 | "Roxanna", 1074 | "si334", 1075 | 0 1076 | ], 1077 | [ 1078 | "Della", 1079 | "si334", 1080 | 0 1081 | ], 1082 | [ 1083 | "Areeba", 1084 | "si334", 1085 | 0 1086 | ], 1087 | [ 1088 | "Elisa", 1089 | "si334", 1090 | 0 1091 | ], 1092 | [ 1093 | "Wu", 1094 | "si334", 1095 | 0 1096 | ], 1097 | [ 1098 | "Muskaan", 1099 | "si334", 1100 | 0 1101 | ], 1102 | [ 1103 | "Hyden", 1104 | "si334", 1105 | 0 1106 | ], 1107 | [ 1108 | "Azzedine", 1109 | "si334", 1110 | 0 1111 | ], 1112 | [ 1113 | "Zaina", 1114 | "si334", 1115 | 0 1116 | ], 1117 | [ 1118 | "Ryley", 1119 | "si334", 1120 | 0 1121 | ], 1122 | [ 1123 | "Chase", 1124 | "si334", 1125 | 0 1126 | ], 1127 | [ 1128 | "Ammarah", 1129 | "si334", 1130 | 0 1131 | ], 1132 | [ 1133 | "Shreeram", 1134 | "si334", 1135 | 0 1136 | ], 1137 | [ 1138 | "Jordyn", 1139 | "si334", 1140 | 0 1141 | ], 1142 | [ 1143 | "Hamzah", 1144 | "si334", 1145 | 0 1146 | ], 1147 | [ 1148 | "Ehsen", 1149 | "si334", 1150 | 0 1151 | ], 1152 | [ 1153 | "Geraldine", 1154 | "si334", 1155 | 0 1156 | ], 1157 | [ 1158 | "Donnacha", 1159 | "si334", 1160 | 0 1161 | ], 1162 | [ 1163 | "Jessica", 1164 | "si334", 1165 | 0 1166 | ], 1167 | [ 1168 | "Tammara", 1169 | "si334", 1170 | 0 1171 | ], 1172 | [ 1173 | "Bogdan", 1174 | "si334", 1175 | 0 1176 | ], 1177 | [ 1178 | "Kadi", 1179 | "si334", 1180 | 0 1181 | ], 1182 | [ 1183 | "Jordan", 1184 | "si334", 1185 | 0 1186 | ], 1187 | [ 1188 | "Abdalroof", 1189 | "si334", 1190 | 0 1191 | ], 1192 | [ 1193 | "Ngonidzashe", 1194 | "si334", 1195 | 0 1196 | ], 1197 | [ 1198 | "Fahad", 1199 | "si334", 1200 | 0 1201 | ], 1202 | [ 1203 | "Aden", 1204 | "si334", 1205 | 0 1206 | ], 1207 | [ 1208 | "Malakai", 1209 | "si334", 1210 | 0 1211 | ], 1212 | [ 1213 | "Zehra", 1214 | "si363", 1215 | 1 1216 | ], 1217 | [ 1218 | "Minna", 1219 | "si363", 1220 | 0 1221 | ], 1222 | [ 1223 | "Tanisha", 1224 | "si363", 1225 | 0 1226 | ], 1227 | [ 1228 | "Emi", 1229 | "si363", 1230 | 0 1231 | ], 1232 | [ 1233 | "Diesil", 1234 | "si363", 1235 | 0 1236 | ], 1237 | [ 1238 | "Kaley", 1239 | "si363", 1240 | 0 1241 | ], 1242 | [ 1243 | "Tala", 1244 | "si363", 1245 | 0 1246 | ], 1247 | [ 1248 | "Marie", 1249 | "si363", 1250 | 0 1251 | ], 1252 | [ 1253 | "Pacey", 1254 | "si363", 1255 | 0 1256 | ], 1257 | [ 1258 | "Jacky", 1259 | "si363", 1260 | 0 1261 | ], 1262 | [ 1263 | "Tyler", 1264 | "si363", 1265 | 0 1266 | ], 1267 | [ 1268 | "Yasemin", 1269 | "si363", 1270 | 0 1271 | ], 1272 | [ 1273 | "Ramsey", 1274 | "si363", 1275 | 0 1276 | ], 1277 | [ 1278 | "Mounia", 1279 | "si363", 1280 | 0 1281 | ], 1282 | [ 1283 | "Shiza", 1284 | "si363", 1285 | 0 1286 | ], 1287 | [ 1288 | "Teejay", 1289 | "si363", 1290 | 0 1291 | ], 1292 | [ 1293 | "Polly", 1294 | "si363", 1295 | 0 1296 | ], 1297 | [ 1298 | "Juan", 1299 | "si363", 1300 | 0 1301 | ], 1302 | [ 1303 | "Umaima", 1304 | "si363", 1305 | 0 1306 | ], 1307 | [ 1308 | "Mailli", 1309 | "si363", 1310 | 0 1311 | ], 1312 | [ 1313 | "Favour", 1314 | "si363", 1315 | 0 1316 | ], 1317 | [ 1318 | "Nontando", 1319 | "si363", 1320 | 0 1321 | ], 1322 | [ 1323 | "Eadie", 1324 | "si363", 1325 | 0 1326 | ], 1327 | [ 1328 | "Mcbride", 1329 | "si363", 1330 | 0 1331 | ], 1332 | [ 1333 | "Atlanta", 1334 | "si363", 1335 | 0 1336 | ], 1337 | [ 1338 | "Kaden", 1339 | "si363", 1340 | 0 1341 | ], 1342 | [ 1343 | "Ngaire", 1344 | "si363", 1345 | 0 1346 | ], 1347 | [ 1348 | "Tammara", 1349 | "si364", 1350 | 1 1351 | ], 1352 | [ 1353 | "Deecan", 1354 | "si364", 1355 | 0 1356 | ], 1357 | [ 1358 | "Maren", 1359 | "si364", 1360 | 0 1361 | ], 1362 | [ 1363 | "Geena", 1364 | "si364", 1365 | 0 1366 | ], 1367 | [ 1368 | "Siubhan", 1369 | "si364", 1370 | 0 1371 | ], 1372 | [ 1373 | "Abbeygale", 1374 | "si364", 1375 | 0 1376 | ], 1377 | [ 1378 | "Evan", 1379 | "si364", 1380 | 0 1381 | ], 1382 | [ 1383 | "Ceol", 1384 | "si364", 1385 | 0 1386 | ], 1387 | [ 1388 | "Christianna", 1389 | "si364", 1390 | 0 1391 | ], 1392 | [ 1393 | "Cavan", 1394 | "si364", 1395 | 0 1396 | ], 1397 | [ 1398 | "Gabriela", 1399 | "si364", 1400 | 0 1401 | ], 1402 | [ 1403 | "Mhyren", 1404 | "si364", 1405 | 0 1406 | ], 1407 | [ 1408 | "Kaylem", 1409 | "si364", 1410 | 0 1411 | ], 1412 | [ 1413 | "Eng", 1414 | "si364", 1415 | 0 1416 | ], 1417 | [ 1418 | "Daood", 1419 | "si364", 1420 | 0 1421 | ], 1422 | [ 1423 | "Corin", 1424 | "si364", 1425 | 0 1426 | ], 1427 | [ 1428 | "Haydn", 1429 | "si364", 1430 | 0 1431 | ], 1432 | [ 1433 | "Fatimah", 1434 | "si364", 1435 | 0 1436 | ], 1437 | [ 1438 | "Bente", 1439 | "si364", 1440 | 0 1441 | ], 1442 | [ 1443 | "Oban", 1444 | "si364", 1445 | 0 1446 | ], 1447 | [ 1448 | "Kashif", 1449 | "si364", 1450 | 0 1451 | ], 1452 | [ 1453 | "Matt", 1454 | "si364", 1455 | 0 1456 | ], 1457 | [ 1458 | "Conley", 1459 | "si364", 1460 | 0 1461 | ], 1462 | [ 1463 | "Tegen", 1464 | "si364", 1465 | 0 1466 | ], 1467 | [ 1468 | "Dacia", 1469 | "si364", 1470 | 0 1471 | ], 1472 | [ 1473 | "Andrei", 1474 | "si364", 1475 | 0 1476 | ], 1477 | [ 1478 | "Usman", 1479 | "si364", 1480 | 0 1481 | ], 1482 | [ 1483 | "Matilda", 1484 | "si364", 1485 | 0 1486 | ], 1487 | [ 1488 | "Darrell", 1489 | "si364", 1490 | 0 1491 | ], 1492 | [ 1493 | "Lucille", 1494 | "si364", 1495 | 0 1496 | ], 1497 | [ 1498 | "Paulina", 1499 | "si364", 1500 | 0 1501 | ], 1502 | [ 1503 | "Marko", 1504 | "si364", 1505 | 0 1506 | ], 1507 | [ 1508 | "Morgan", 1509 | "si364", 1510 | 0 1511 | ], 1512 | [ 1513 | "Jaii", 1514 | "si422", 1515 | 1 1516 | ], 1517 | [ 1518 | "Melica", 1519 | "si422", 1520 | 0 1521 | ], 1522 | [ 1523 | "Seane", 1524 | "si422", 1525 | 0 1526 | ], 1527 | [ 1528 | "Antoni", 1529 | "si422", 1530 | 0 1531 | ], 1532 | [ 1533 | "Lyle", 1534 | "si422", 1535 | 0 1536 | ], 1537 | [ 1538 | "Devlin", 1539 | "si422", 1540 | 0 1541 | ], 1542 | [ 1543 | "Calan", 1544 | "si422", 1545 | 0 1546 | ], 1547 | [ 1548 | "Lilias", 1549 | "si422", 1550 | 0 1551 | ], 1552 | [ 1553 | "Idrees", 1554 | "si422", 1555 | 0 1556 | ], 1557 | [ 1558 | "Mayson", 1559 | "si422", 1560 | 0 1561 | ], 1562 | [ 1563 | "Aryian", 1564 | "si422", 1565 | 0 1566 | ], 1567 | [ 1568 | "Taliah", 1569 | "si422", 1570 | 0 1571 | ], 1572 | [ 1573 | "Aaliyah", 1574 | "si422", 1575 | 0 1576 | ], 1577 | [ 1578 | "Caley", 1579 | "si422", 1580 | 0 1581 | ], 1582 | [ 1583 | "Ines", 1584 | "si422", 1585 | 0 1586 | ], 1587 | [ 1588 | "Clifford", 1589 | "si422", 1590 | 0 1591 | ], 1592 | [ 1593 | "Allannah", 1594 | "si422", 1595 | 0 1596 | ], 1597 | [ 1598 | "Enis", 1599 | "si422", 1600 | 0 1601 | ], 1602 | [ 1603 | "Virginie", 1604 | "si422", 1605 | 0 1606 | ], 1607 | [ 1608 | "Tyane", 1609 | "si422", 1610 | 0 1611 | ], 1612 | [ 1613 | "Caela", 1614 | "si422", 1615 | 0 1616 | ], 1617 | [ 1618 | "Davis", 1619 | "si422", 1620 | 0 1621 | ], 1622 | [ 1623 | "Nerea", 1624 | "si422", 1625 | 0 1626 | ], 1627 | [ 1628 | "Aoibha", 1629 | "si422", 1630 | 0 1631 | ], 1632 | [ 1633 | "Conlly", 1634 | "si422", 1635 | 0 1636 | ], 1637 | [ 1638 | "Levon", 1639 | "si422", 1640 | 0 1641 | ], 1642 | [ 1643 | "Yusef", 1644 | "si422", 1645 | 0 1646 | ], 1647 | [ 1648 | "Sam", 1649 | "si422", 1650 | 0 1651 | ], 1652 | [ 1653 | "Chizaram", 1654 | "si422", 1655 | 0 1656 | ], 1657 | [ 1658 | "Zainab", 1659 | "si422", 1660 | 0 1661 | ], 1662 | [ 1663 | "Wu", 1664 | "si422", 1665 | 0 1666 | ], 1667 | [ 1668 | "Guy", 1669 | "si422", 1670 | 0 1671 | ], 1672 | [ 1673 | "Alyia", 1674 | "si422", 1675 | 0 1676 | ], 1677 | [ 1678 | "Kasandra", 1679 | "si422", 1680 | 0 1681 | ], 1682 | [ 1683 | "Fyfe", 1684 | "si422", 1685 | 0 1686 | ], 1687 | [ 1688 | "Justyna", 1689 | "si422", 1690 | 0 1691 | ], 1692 | [ 1693 | "Jacob", 1694 | "si422", 1695 | 0 1696 | ], 1697 | [ 1698 | "Holly", 1699 | "si422", 1700 | 0 1701 | ], 1702 | [ 1703 | "Dougal", 1704 | "si422", 1705 | 0 1706 | ], 1707 | [ 1708 | "Antonio", 1709 | "si422", 1710 | 0 1711 | ], 1712 | [ 1713 | "Makaila", 1714 | "si422", 1715 | 0 1716 | ], 1717 | [ 1718 | "Katelin", 1719 | "si422", 1720 | 0 1721 | ], 1722 | [ 1723 | "Rosslyn", 1724 | "si422", 1725 | 0 1726 | ], 1727 | [ 1728 | "Kames", 1729 | "si422", 1730 | 0 1731 | ], 1732 | [ 1733 | "Suilven", 1734 | "si422", 1735 | 0 1736 | ], 1737 | [ 1738 | "Stacy", 1739 | "si422", 1740 | 0 1741 | ], 1742 | [ 1743 | "Shaye", 1744 | "si422", 1745 | 0 1746 | ], 1747 | [ 1748 | "Hcen", 1749 | "si422", 1750 | 0 1751 | ], 1752 | [ 1753 | "Seb", 1754 | "si430", 1755 | 1 1756 | ], 1757 | [ 1758 | "Ragid", 1759 | "si430", 1760 | 0 1761 | ], 1762 | [ 1763 | "Amiee", 1764 | "si430", 1765 | 0 1766 | ], 1767 | [ 1768 | "Zella", 1769 | "si430", 1770 | 0 1771 | ], 1772 | [ 1773 | "Sorche", 1774 | "si430", 1775 | 0 1776 | ], 1777 | [ 1778 | "Maiya", 1779 | "si430", 1780 | 0 1781 | ], 1782 | [ 1783 | "Tyra", 1784 | "si430", 1785 | 0 1786 | ], 1787 | [ 1788 | "Hassanali", 1789 | "si430", 1790 | 0 1791 | ], 1792 | [ 1793 | "Naina", 1794 | "si430", 1795 | 0 1796 | ], 1797 | [ 1798 | "Jaydon", 1799 | "si430", 1800 | 0 1801 | ], 1802 | [ 1803 | "Merran", 1804 | "si430", 1805 | 0 1806 | ], 1807 | [ 1808 | "Lucille", 1809 | "si430", 1810 | 0 1811 | ], 1812 | [ 1813 | "Rohaan", 1814 | "si430", 1815 | 0 1816 | ], 1817 | [ 1818 | "Keaton", 1819 | "si430", 1820 | 0 1821 | ], 1822 | [ 1823 | "Darren", 1824 | "si430", 1825 | 0 1826 | ], 1827 | [ 1828 | "Israa", 1829 | "si430", 1830 | 0 1831 | ], 1832 | [ 1833 | "Ainsley", 1834 | "si430", 1835 | 0 1836 | ], 1837 | [ 1838 | "Dmitri", 1839 | "si430", 1840 | 0 1841 | ], 1842 | [ 1843 | "Eiko", 1844 | "si430", 1845 | 0 1846 | ], 1847 | [ 1848 | "Gurwinder", 1849 | "si430", 1850 | 0 1851 | ], 1852 | [ 1853 | "Carlynn", 1854 | "si430", 1855 | 0 1856 | ], 1857 | [ 1858 | "Cian", 1859 | "si430", 1860 | 0 1861 | ], 1862 | [ 1863 | "Burak", 1864 | "si430", 1865 | 0 1866 | ], 1867 | [ 1868 | "Rylan", 1869 | "si430", 1870 | 0 1871 | ], 1872 | [ 1873 | "Eli", 1874 | "si430", 1875 | 0 1876 | ], 1877 | [ 1878 | "Maggy", 1879 | "si430", 1880 | 0 1881 | ], 1882 | [ 1883 | "Tobie", 1884 | "si430", 1885 | 0 1886 | ], 1887 | [ 1888 | "Iseabel", 1889 | "si430", 1890 | 0 1891 | ], 1892 | [ 1893 | "Anum", 1894 | "si430", 1895 | 0 1896 | ], 1897 | [ 1898 | "Valentin", 1899 | "si430", 1900 | 0 1901 | ], 1902 | [ 1903 | "Tisloh", 1904 | "si430", 1905 | 0 1906 | ], 1907 | [ 1908 | "Saifaddine", 1909 | "si430", 1910 | 0 1911 | ], 1912 | [ 1913 | "Marla", 1914 | "si430", 1915 | 0 1916 | ], 1917 | [ 1918 | "Yishuka", 1919 | "si430", 1920 | 0 1921 | ], 1922 | [ 1923 | "Felicia", 1924 | "si430", 1925 | 0 1926 | ], 1927 | [ 1928 | "Jill", 1929 | "si430", 1930 | 0 1931 | ], 1932 | [ 1933 | "Kieva", 1934 | "si430", 1935 | 0 1936 | ], 1937 | [ 1938 | "Atika", 1939 | "si430", 1940 | 0 1941 | ], 1942 | [ 1943 | "Nyah", 1944 | "si430", 1945 | 0 1946 | ], 1947 | [ 1948 | "Evelina", 1949 | "si430", 1950 | 0 1951 | ], 1952 | [ 1953 | "Man", 1954 | "si430", 1955 | 0 1956 | ], 1957 | [ 1958 | "Conlon", 1959 | "si430", 1960 | 0 1961 | ], 1962 | [ 1963 | "Kevaugh", 1964 | "si430", 1965 | 0 1966 | ], 1967 | [ 1968 | "Addisson", 1969 | "si430", 1970 | 0 1971 | ], 1972 | [ 1973 | "Tessa", 1974 | "si430", 1975 | 0 1976 | ], 1977 | [ 1978 | "Garry", 1979 | "si430", 1980 | 0 1981 | ], 1982 | [ 1983 | "Cuillin", 1984 | "si430", 1985 | 0 1986 | ], 1987 | [ 1988 | "Riley", 1989 | "si430", 1990 | 0 1991 | ], 1992 | [ 1993 | "Nicoll", 1994 | "si430", 1995 | 0 1996 | ], 1997 | [ 1998 | "Chrystal", 1999 | "si430", 2000 | 0 2001 | ], 2002 | [ 2003 | "Aahana", 2004 | "si430", 2005 | 0 2006 | ], 2007 | [ 2008 | "Madilyn", 2009 | "si430", 2010 | 0 2011 | ], 2012 | [ 2013 | "Leithen", 2014 | "si430", 2015 | 0 2016 | ] 2017 | ] --------------------------------------------------------------------------------