├── 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 | ]
--------------------------------------------------------------------------------