├── COPYRIGHT
├── README
├── bin
├── announce_rss.rb
├── bibparse.rb
├── datereplace.rb
└── mklectures.rb
├── ex
├── dga-744
│ ├── Makefile
│ ├── announcements.srhtml
│ ├── announcements.txt
│ ├── assignments.srhtml
│ ├── bodyhead.srhtml
│ ├── class.bib
│ ├── exams.srhtml
│ ├── index.srhtml
│ ├── lectures.txt
│ ├── pagebottom.srhtml
│ ├── pagehead.srhtml
│ ├── project.srhtml
│ ├── readinglist.head
│ ├── readinglist.tail
│ ├── style.css
│ ├── syllabus.head
│ └── syllabus.tail
├── dga-849
│ ├── bodyhead.srhtml
│ ├── class.bib
│ ├── index.srhtml
│ ├── lectures.txt
│ ├── pagebottom.srhtml
│ ├── pagehead.srhtml
│ ├── readinglist.head
│ ├── readinglist.tail
│ ├── style.css
│ ├── syllabus.head
│ └── syllabus.tail
└── feamster-7260
│ ├── class.bib
│ ├── lectures.txt
│ ├── readinglist.head
│ ├── readinglist.tail
│ ├── style.css
│ ├── syllabus.head
│ └── syllabus.tail
├── include
├── doctype.html
└── weblib.rb
└── www
└── Makefile
/COPYRIGHT:
--------------------------------------------------------------------------------
1 | This software is licensed under the Apache License, version 2.0.
2 |
3 | Copyright (C) 2005-2012 David G. Andersen
4 |
5 | For a copy of the Apache License, please see http://www.apache.org/licenses/LICENSE-2.0
6 |
--------------------------------------------------------------------------------
/README:
--------------------------------------------------------------------------------
1 | Course web page software.
2 | Authors: Dave Andersen, Nick Feamster
3 |
4 | This program generates the framework for the undergrad and grad networks
5 | courses that Dave and Nick teach. It produces a syllabus from a simple
6 | text file describing the lectures, produces announcements and RSS feeds
7 | of the announcements, links to papers, etc.
8 |
9 | To use:
10 |
11 | look at one of the example directories.
12 | Type make
13 | Copy to your own course directory and adjust the COURSE=
14 | pointer in the makefile appropriately
15 |
16 | Edit lectures.txt
17 | Edit announcements.txt
18 | Edit class.bib
19 | Edit index.srhtml to customize the main page to your desires
20 | Edit syllabus.head and syllabus.tail to customize per your class
21 | ** note: Do not edit syllabus.srhtml or .html directly; it will be
22 | overwritten **
23 | make
24 |
25 | You can customize things more by editing the other files. Almost all
26 | stylistic things (presentation, layout, etc) are controlled by style.css
27 |
--------------------------------------------------------------------------------
/bin/announce_rss.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | require 'yaml'
4 | require 'rss/2.0'
5 | require 'rss/maker'
6 | require 'rss/content'
7 |
8 | ## Ugly hack to get content stuff with RSS 2.0
9 | module RSS
10 | class RDF
11 | class Item; include ContentModel; end
12 | end
13 | end
14 |
15 | @ann = YAML::load_file("announcements.txt")
16 | @conf = YAML::load_file("lectures.txt")
17 |
18 | rss = RSS::Maker.make("2.0") do |maker|
19 | maker.channel.title = "#{@conf["CLASS_SHORT"]} Announcements"
20 | maker.channel.description = "Announcements feed for the #{@conf["CLASS"]} course"
21 | maker.channel.link = @conf["COURSE_URL"]
22 | maker.encoding = "UTF-8"
23 |
24 | @ann.each { |a|
25 | item = maker.items.new_item
26 | item.link = "#{@conf["COURSE_URL"]}/announcements.html"
27 | item.title = a["T"]
28 | item.date = Time.parse(a["D"])
29 | item.description = a["C"]
30 | }
31 | maker.items.do_sort = true
32 | maker.items.max_size = 100
33 | end
34 |
35 | File.open("rss2.xml", "w+") do |f|
36 | f.print rss
37 | end
38 |
--------------------------------------------------------------------------------
/bin/bibparse.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | class BibParse
4 | def initialize(bf)
5 | @bibfile = bf
6 |
7 | @entries = Hash.new
8 | @crossrefs = Hash.new
9 | @readinglist = Hash.new
10 | @readinglistbytype = Hash.new
11 | @strs = Hash.new
12 |
13 | parse
14 | end
15 |
16 | def cleanup(val)
17 | val.gsub(/\"/, "").gsub(/[\{\}]/, "").sub(/,\s*$/, "")
18 | end
19 |
20 |
21 | def parse
22 |
23 | bibent = nil
24 | ref = nil
25 |
26 | IO.foreach("#{@bibfile}") { |l|
27 |
28 | if (l =~ /\@(.*)\{\s*(.*?)\s*,/)
29 | type = $1
30 | ref = $2
31 |
32 | bibent = Hash.new
33 | bibent["type"] = type
34 |
35 | elsif (l =~ /@string\{(.*)\}/i)
36 | strdef = $1
37 | if (strdef =~ /(\w+)\s*\=\s*(.*)/)
38 | strname = $1
39 | strval = $2
40 | val = cleanup(strval)
41 | @strs[strname] = val
42 | end
43 |
44 | elsif (l =~ /\s*(\w+)\s*\=\s*(.*)/)
45 | key = $1
46 | val = $2
47 |
48 | val.gsub!(/\"/, "")
49 | val.gsub!(/[\{\}]/, "")
50 | val.sub!(/,\s*$/, "")
51 | if (@strs[val])
52 | val = @strs[val]
53 | end
54 |
55 | bibent["#{key}"] = val
56 |
57 | elsif (l =~ /^\}/)
58 |
59 | if (bibent["type"] == "proceedings")
60 | @crossrefs[ref] = bibent
61 | else
62 | @entries[ref] = bibent
63 | end
64 | end
65 | }
66 | end
67 |
68 |
69 | def printHTML(ref, out)
70 |
71 | r = @entries[ref]
72 |
73 | out.puts "#{r["author"]}
"
74 | out.puts "#{r["title"]}
"
75 |
76 |
77 | if (r["crossref"] && r["crossref"].length > 0)
78 | cr = @crossrefs[r["crossref"]]
79 | else
80 | cr = r
81 | end
82 |
83 | if (cr["booktitle"] || cr["journal"])
84 |
85 | title = cr["booktitle"]?cr["booktitle"]:cr["journal"]
86 | mon = cr["month"] ? cr["month"].capitalize : ""
87 | year = cr["year"] || ""
88 | out.print "In #{title}, #{mon} #{year}"
89 | out.print ", pages #{cr["pages"]}" if cr["pages"]
90 | out.print "
\n"
91 | end
92 |
93 |
94 | # if r["url"]
95 | # out.puts "Link
"
96 | # end
97 |
98 | end
99 |
100 |
101 | def setURL(ref,url)
102 | if (!@entries[ref])
103 | $stderr.puts "URL for undefined reading list entry #{ref}. Creating."
104 | $stderr.puts "Create an entry in class.bib to suppress this warning"
105 | @entries[ref] = Hash.new
106 | end
107 | @entries[ref]["url"] = url
108 | end
109 |
110 | def addToList(ref, lecent, type=nil)
111 | if (!@readinglist[lecent] || @readinglist[lecent].size <= 0)
112 | @readinglist[lecent] = Array.new
113 | end
114 | @readinglist[lecent] << ref
115 |
116 | end
117 |
118 |
119 | def printReadingList(filename, head=nil, tail=nil)
120 |
121 | out = File.new(filename, "w+")
122 |
123 | out.print IO.read(head) if head
124 |
125 | out.puts "
"
126 |
127 | @readinglist.keys.sort {
128 | |x,y| x["lecnum"].to_i <=> y["lecnum"].to_i
129 | }.each { |l|
130 | out.puts "- "
131 | out.puts "#{l["date"]} -- Lecture #{l["lecnum"]}: #{l["T"]}
"
132 |
133 | out.puts ""
134 |
135 | @readinglist[l].each { |ref|
136 | out.puts "\n- "
137 | printHTML(ref, out)
138 | out.puts "
\n"
139 | }
140 | out.puts "
"
141 | out.puts " "
142 | }
143 | out.puts "
"
144 |
145 | now = Time.new
146 | out.puts "Last Updated #{now}
"
147 |
148 | out.print IO.read(tail) if tail
149 |
150 | end
151 | end
152 |
153 | if $0 == __FILE__
154 | bp = BibParse.new("./class.bib")
155 | bp.setURL("Infranet", "http://foo/")
156 |
157 |
158 | # add some test entries
159 | lecent = Hash.new
160 | lecent["date"] = "10/17"
161 | lecent["T"] = "Anonymity"
162 | bp.addToList("Infranet",lecent)
163 |
164 | lecent = Hash.new
165 | lecent["date"] = "10/18"
166 | lecent["T"] = "Management"
167 | bp.addToList("rcc",lecent)
168 |
169 |
170 | bp.printReadingList("readinglist.srhtml",
171 | "readinglist.head",
172 | "readinglist.tail")
173 | end
174 |
--------------------------------------------------------------------------------
/bin/datereplace.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 |
3 | now = Time.new
4 | system("cp #{ARGV[0]} #{ARGV[0]}.tmp")
5 | f = File.new(ARGV[0], "w+")
6 | IO.foreach("#{ARGV[0]}.tmp") { |l|
7 | l.gsub!(/Updated .*$/,
8 | sprintf("Updated %s", now.to_s))
9 | f.print l
10 | }
11 | system("rm #{ARGV[0]}.tmp")
12 |
--------------------------------------------------------------------------------
/bin/mklectures.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env ruby
2 |
3 | ##
4 | # Convert a flat text file of lectures to HTML and output a schedule ical file
5 | ##
6 |
7 | $LOAD_PATH << File.dirname(__FILE__)
8 |
9 | require 'time'
10 | require 'bibparse'
11 | require 'yaml'
12 |
13 | LECTUREFILE = 'lectures.txt'
14 | BIBFILE = "./class.bib"
15 | SLIDETYPES = ["pdf", "ps", "html", "ppt", "key", "odp", "mp3", "mov", "txt"]
16 | SIZETYPES = ["mp3", "mov"]
17 | SLIDEDIR = "lectures"
18 |
19 | class LecPrinter
20 |
21 | def initialize(lecfile, bibparse=nil)
22 | @lecfile = lecfile
23 | @bp = bibparse
24 | @start_time = nil
25 | @end_time = nil
26 | @year = nil
27 | @instructor = nil
28 | @term = nil
29 | @summary = nil
30 | @class_name = nil
31 |
32 | readlecs(lecfile)
33 | end
34 |
35 |
36 | def print_ical
37 | out = File.new("#{@class_short}.ics", "w+")
38 | out.puts %Q{
39 | BEGIN:VCALENDAR
40 | VERSION:2.0
41 | X-WR-CALNAME:#{@conf["CLASS_SHORT"].to_s.downcase}
42 | X-WR-TIMEZONE:US/Eastern
43 | CALSCALE:GREGORIAN
44 | }.gsub(/^\s*/, '')
45 |
46 | @lectures.each { |l|
47 | next if l["type"] != "lecture"
48 | class_summary = @conf['CLASS_SHORT'] + ' (' +l["T"] + ' - ' + l["I"] + ')'
49 | class_desc = class_summary + ' '
50 | if l["R"] != nil
51 | class_desc += ' Readings: ' + l["R"].to_s + ' '
52 | end
53 | if l["N"] != nil
54 | class_desc += ' Notes: ' + l["N"]
55 | end
56 | out.puts %Q{
57 | BEGIN:VEVENT
58 | DTSTART;TZID=US/Eastern:#{l['stime'].strftime("%Y%m%dT%H%M00")}
59 | DTEND;TZID=US/Eastern:#{l['etime'].strftime("%Y%m%dT%H%M00")}
60 | SUMMARY:#{class_summary}
61 | DESCRIPTION:#{class_desc}
62 | END:VEVENT
63 | }.gsub(/^\s*/, '')
64 | }
65 |
66 | out.puts "END:VCALENDAR"
67 | end
68 |
69 | def print_html
70 | print IO.read("syllabus.head")
71 | puts ""
72 |
73 | rowcount = 0
74 | @lectures.each { |l|
75 |
76 | ltype = l["type"]
77 |
78 | if (l["type"] == "lecture")
79 | # allow a wash on alternating rows
80 | if (@conf["ALTERNATE"] == 'row')
81 | if ((rowcount & 1) == 1)
82 | ltype += " alt"
83 | end
84 | rowcount += 1
85 | elsif (@conf["ALTERNATE"] == 'week')
86 | weeknum = l['stime'].strftime("%U")
87 | if ((weeknum.to_i & 1) == 1)
88 | ltype += " alt"
89 | end
90 | end
91 | end
92 |
93 | puts ""
94 |
95 | if (l["type"] == "lechead")
96 |
97 | puts %Q{ #{l["T"]} | }
98 | puts "
";
99 | next
100 | end
101 |
102 | if (@conf["SHOW_LECNUM"])
103 | if l["type"] == "lecture"
104 | puts " #{l["lecnum"]} | "
105 | else
106 | puts " | "
107 | end
108 | end
109 | puts " #{l["date"]} | "
110 |
111 | if (@conf["SHOW_INSTRUCTOR"])
112 | puts " #{l["I"]} | "
113 | end
114 |
115 | tspan = ""
116 | if (l["TSPAN"])
117 | tspan = " colspan=\"#{l["TSPAN"]}\""
118 | end
119 | puts " #{l["T"]} "
120 |
121 | if (l["S"])
122 | SLIDETYPES.each { |ext|
123 | filename = SLIDEDIR + "/" + l["S"] + "." + ext
124 | if (FileTest.exists?(filename))
125 | size = ""
126 | if (SIZETYPES.include?(ext))
127 | bytes = FileTest.size(filename)
128 | size = sprintf(" (%.1f MB) ", bytes.to_f/(1024.0*1024.0))
129 | end
130 |
131 | print "[#{ext}#{size}] "
132 | end
133 | }
134 | end
135 |
136 | if (l["V"] && l["V"].to_s.length > 0)
137 | vcount = 1
138 | l["V"].to_s.split.each { |v|
139 | print "[Video #{vcount}] "
140 | vcount += 1
141 | }
142 | end
143 |
144 | puts " | "
145 |
146 | # Notes
147 | if (!l["TSPAN"] || l["TSPAN"].to_i <= 1)
148 | if (l["N"] =~ /Due/i && @conf["HIGHLIGHT_DUE"])
149 | puts " #{l["N"]} | "
150 | else
151 | puts " #{l["N"]} | "
152 | end
153 | end
154 |
155 | if (!l["TSPAN"] || l["TSPAN"].to_i <= 2)
156 | # Readings
157 | print " #{l["R"]} "
158 |
159 | # Links for Readings
160 | if (l["RL"] && l["RL"].length > 0)
161 | rlcount = 1
162 |
163 |
164 | l["RL"].split.each { |rl|
165 | ref = rl.split('::')
166 | print "#{ref[0]} "
167 | }
168 | end
169 |
170 | # Bibtex-Based Links for Readings
171 | first = true
172 | if (l["RB"] && l["RB"].length > 0)
173 | l["RB"].split.each { |rb|
174 | ref = rb.split('::')
175 | url = ref[1]
176 | if (url !~ /^http/)
177 | url = @readingbase.to_s + "/" + url.to_s
178 | end
179 | @bp.setURL(ref[0],url)
180 | # add to the reading list
181 | @bp.addToList(ref[0], l)
182 | prettyref = ref[0].gsub("_", " ")
183 | if (!first)
184 | print ", "
185 | end
186 | first = false
187 | print "#{prettyref}"
188 | }
189 | end
190 | puts " | "
191 | end
192 |
193 | puts ""
194 | }
195 |
196 | puts ""
197 |
198 | print IO.read("syllabus.tail")
199 | end
200 |
201 | def readlecs(lecfile)
202 | @conf = YAML::load_file(lecfile)
203 |
204 | @year = @conf['YEAR']
205 | @summary = @conf['SUMMARY']
206 | @class_name = @conf['CLASS']
207 | @class_short = @conf['CLASS_SHORT'] + '-' +
208 | @conf['TERM'] + @conf['YEAR'].to_s
209 | @instructor = @conf['INSTRUCTOR']
210 | @videobase = @conf['VIDEOBASE']
211 | @readingbase = @conf['READINGBASE']
212 | @start_time = @conf['START_TIME']
213 | @end_time = @conf['END_TIME']
214 |
215 | lecnum = 1
216 |
217 | @lectures = Array.new
218 | @conf['LECTURES'].each { |l|
219 |
220 | if (l.class == String)
221 | lec = Hash.new
222 | lec["type"] = "lechead"
223 | lec["T"] = l.dup
224 | else
225 |
226 | key = l.keys[0]
227 | if (l[key] != nil)
228 | lec = l[key].dup
229 | else
230 | lec = Hash.new
231 | end
232 |
233 | lec["type"] ||= "lecture"
234 |
235 | if (lec["type"] == "lecture")
236 | lec["lecnum"] = lecnum
237 | lecnum = lecnum + 1
238 | end
239 |
240 | lec["year"] = @year
241 | m, d, y = key.split("/") # obtuse. we store in hash keyed by date
242 | lec["day"] = d
243 | lec["month"] = m
244 | if (y)
245 | lec["year"] = y
246 | end
247 | lec["START"] ||= @start_time
248 | lec["END"] ||= @end_time
249 | lec["I"] ||= @instructor
250 |
251 | shour, smin = lec["START"].split(":")
252 | ehour, emin = lec["END"].split(":")
253 | lec["stime"] = Time.local(lec["year"].to_i, lec["month"].to_i, lec["day"].to_i,
254 | shour.to_i, smin.to_i, 0)
255 | lec["etime"] = Time.local(lec["year"].to_i, lec["month"].to_i, lec["day"].to_i,
256 | ehour.to_i, emin.to_i, 0)
257 | lec["date"] = lec["stime"].strftime("%a %m/%d")
258 | end
259 |
260 | @lectures.push(lec)
261 | }
262 | end
263 | end
264 |
265 | bp = nil
266 | if (FileTest.exists?(BIBFILE))
267 | bp = BibParse.new(BIBFILE)
268 | end
269 | lp = LecPrinter.new(LECTUREFILE, bp)
270 |
271 | lp.print_html
272 | lp.print_ical
273 |
274 | if (bp)
275 | bp.printReadingList("readinglist.html",
276 | "readinglist.head",
277 | "readinglist.tail")
278 | end
279 |
--------------------------------------------------------------------------------
/ex/dga-744/Makefile:
--------------------------------------------------------------------------------
1 | # Note: if you cannot write directly to AFS, you need to speciy
2 | # the AFSHOST environment variable (include a semi-colon at the end)
3 | # e.g. AFSHOST=tye.coda.cs.cmu.edu:
4 | PUBDIR=/afs/cs.cmu.edu/project/dot-1/public_html_15-744/S07
5 | COURSE = ../../
6 | WEBLIB = "${COURSE}/include/weblib.rb"
7 | RDEPS = pagehead.srhtml bodyhead.srhtml Makefile
8 | CBIN = "${COURSE}/bin"
9 | ASSIGN=ps_theory1.ps ps_theory2.pdf ps_theory1_soln.pdf ps_tools1.pdf \
10 | ps_tools1_soln.pdf midterm_soln.pdf ps2 ps_tools2.pdf ps_theory2_soln.pdf
11 | GENPAGES = index.html syllabus.html assignments.html exams.html announcements.html project.html readinglist.html rss2.xml
12 | PUB = $(GENPAGES) $(ASSIGN) 15-744-Spring2007.ics style.css xml.gif dave-ns-notes.ps midterm2004_solutions.pdf
13 |
14 | #all: publish
15 | all: local
16 |
17 | publish: local
18 | @echo publishing HTML docs using env. variable AFSHOST = $(AFSHOST)
19 | @echo Note: you must put a semi-colon at the end. e.g., AFSHOST=tye.code.cs.cmu.edu:
20 | rsync -avz $(PUB) $(AFSHOST)$(PUBDIR)
21 |
22 | local: $(GENPAGES)
23 |
24 | index.html announcements.html: announcements.txt
25 |
26 | rss2.xml: announcements.txt lectures.txt
27 | ${CBIN}/announce_rss.rb
28 |
29 | syllabus.srhtml: lectures.txt syllabus.head syllabus.tail
30 | if [ ! -d lectures/ ]; then ln -s ../lectures ./; fi
31 | ${CBIN}/mklectures.rb > syllabus.srhtml
32 |
33 | clean:
34 | rm -f $(GENPAGES) syllabus.srhtml readinglist.srhtml *.ics
35 |
36 | .SUFFIXES: .html .srhtml
37 |
38 | .srhtml.html: ${RDEPS}
39 | erb -T 2 -r ${WEBLIB} $< > $@
40 |
41 |
--------------------------------------------------------------------------------
/ex/dga-744/announcements.srhtml:
--------------------------------------------------------------------------------
1 | <%= pagetop("15-744 Announcements") %>
2 |
3 | <%
4 | require 'yaml'
5 | @ann = YAML::load(File.open("announcements.txt"))
6 | %>
7 |
8 | Announcements will be posted here.
9 |
10 |
11 |
12 | <% @ann.each { |a| %>
13 | - <%= a["D"] %>: <%= a["T"] %>
14 | <%= a["C"] %>
15 | <% } %>
16 |
17 |
18 |
19 | <%= pagebottom() %>
20 |
--------------------------------------------------------------------------------
/ex/dga-744/announcements.txt:
--------------------------------------------------------------------------------
1 | -
2 | D: 5/01
3 | T: Projects due 05/14
4 | C: Project writeups are due 05/14 to make sure we have a few days to grade them before CSD black friday. Please disregard the earlier due date of 05/09.
5 |
6 | -
7 | D: 4/16
8 | T: Tools homework 2 update
9 | C: If you haven't done part of of hw2 yet, we suggest pinging the host eep.lcs.mit.edu instead of www.cs.cmu.edu. www.cs seems to have a per-host IP ID counter, so it worked in the tests we ran from a single machine, but doesn't work when pinging from two hosts.
10 |
11 | -
12 | D: 4/9
13 | T: Tools homework 2 online
14 | C: The second tools homework is now online. Note that scriptroute does not want to compile on andrew linux machines. Use either your own or a CS linux machine if you have problems.
15 |
16 | -
17 | D: 4/1
18 | T: Syllabus updated
19 | C: The rest of the semester is filled in.
20 |
21 | -
22 | D: 3/19
23 | T: midterm and ps2 solutions
24 | C: Midterm and problem set 2 solutions have been posted.
25 | (If you have not already, you can pick up your HWs and midterms from
26 | Jeff.)
27 | -
28 | D: 3/18
29 | T: scheduling project meetings
30 | C: Please contact Barbara Gardillo, the course secretary, with the times your
31 | group can meet next Wednesday (bag AT cs DOT cmu DOT edu).
32 | -
33 | D: 2/26
34 | T: syllabus updated
35 | C: The mobility lecture was moved to after spring break and the Best of Broadcast lecture inserted.
36 |
37 | -
38 | D: 2/21
39 | T: ps1 solutions annoted with points
40 | C: Also, Q7 and Q9 had typos. Fixed now.
41 |
42 | -
43 | D: 2/15
44 | T: Bug fixed in ps1 solutions
45 | C: The solution for TCP Tahoe was buggy. It's fixed.
46 |
47 | -
48 | D: 2/14
49 | T: Problem Set 2 is available
50 | C: Check the assignments link.
51 | -
52 | D: 2/14
53 | T: ns Tutorial Recitation
54 | C: Jeff will hold a short tutorial on ns this Friday at 3:00-4:30PM
55 | in WeH 5409.
56 | -
57 | D: 2/13
58 | T: Link for CSZ'92 fixed
59 | C: The CSZ'92 postscript was buggy. The link now points to a verified good PDF.
60 |
61 | -
62 | D: 2/7
63 | T: Project proposals due 2/14.
64 | C: The project proposals are due a week from today.
65 |
66 | -
67 | D: 2/2
68 | T: RED paper link updated
69 | C: The paper link for RED has been updated. The postscript was buggy; the newly linked PDF is happy.
70 |
71 | -
72 | D: 2/1
73 | T: Office hour time selection on discussion site
74 | C: Now that the class membership is a bit more stable, there's a post on the discussion site where people should express their preferences for office hour slots, if you have any. We'll have the actual hours established by Monday.
75 |
76 | -
77 | D: 1/30
78 | T: Problem set 1 small change
79 | C: In section E, please draw the THREE RTTs following the loss, not just one. The problem set has been updated.
80 |
81 | -
82 | D: 1/29
83 | T: Problem set 1 available
84 | C: The first theory problem set is now online.
85 |
86 | -
87 | D: 1/28
88 | T: 'Reading for Monday: Just a subset of GR'
89 | C: For Monday, you do NOT need to read all of GR yet. We\'ll be returning to this paper a bit later. For monday, please read the intro, section 2, skim over 6, and read the conclusion.
90 |
91 | -
92 | D: 1/26
93 | T: Announcements RSS feed now available
94 | C: You can now subscribe to the 15-744 announcements as an RSS feed.
95 |
96 | -
97 | D: 1/22
98 | T: Fundamentals Review Recitation
99 | C: The recitation for reviewing network fundamentals will be this Friday, 1/26 from 3-4:30PM in room WeH 4615A. The slides are available here, and more can be found on last fall's 15-441 page.
100 |
101 |
--------------------------------------------------------------------------------
/ex/dga-744/assignments.srhtml:
--------------------------------------------------------------------------------
1 | <%= pagetop("15-744 Assignments") %>
2 |
3 | There will be two programming projects and four written
4 | homework assignments.
5 |
6 |
48 |
49 |
50 | All homework is to be done individually.
51 |
52 | <%= pagebottom() %>
53 |
--------------------------------------------------------------------------------
/ex/dga-744/bodyhead.srhtml:
--------------------------------------------------------------------------------
1 |
2 | <%= @page.title %>
3 |
13 |
14 |
--------------------------------------------------------------------------------
/ex/dga-744/class.bib:
--------------------------------------------------------------------------------
1 | @article{Saltzer84,
2 | author = "Saltzer, J. and Reed, D. and Clark, D.",
3 | title = "{End-to-end Arguments in System Design}",
4 | journal = TOCS,
5 | volume = 2,
6 | pages = {277--288},
7 | month = nov,
8 | year = 1984,
9 | basefilename="saltzer-e2e",
10 | inpage="15-849f05",
11 | category="Background"
12 | }
13 |
14 | @inproceedings{Design,
15 | author = "Clark, D.",
16 | title = "{The Design Philosophy of the DARPA Internet Protocols}",
17 | crossref = "sigcomm1988",
18 | pages = "109--114"
19 | }
20 |
21 | @inproceedings{Architecture,
22 | author = "Clark, D. and Tennenhouse, D.",
23 | title = "{Architectural Consideration for a New Generation of Protocols}",
24 | crossref = "sigcomm1990",
25 | pages = "200--208"
26 | }
27 |
28 |
29 | @InProceedings{OSPF-Monitor,
30 | author = {Aman Shaikh and Albert Greenberg},
31 | title = "{{OSPF} Monitoring: Architecture, Design, and Deployment Experience}",
32 | crossref = "nsdi2004",
33 | pages = {57--70}
34 | }
35 |
36 |
37 | @Article{Stability,
38 | author = {Lixin Gao and Jennifer Rexford},
39 | title = {Stable {I}nternet routing without global coordination},
40 | journal = TON,
41 | year = 2001,
42 | pages = {681--692},
43 | month = dec,
44 | }
45 |
46 |
47 | @inproceedings{rcc,
48 | author = {Nick Feamster and Hari Balakrishnan},
49 | title = "{Detecting BGP Configuration Faults with Static Analysis}",
50 | crossref = "nsdi2005",
51 | pages = {43--56}
52 | }
53 |
54 | @article{Huston:BGPSec,
55 | author = {Geoff Huston},
56 | title = {Securing Inter-Domain Routing},
57 | journal = {The ISP Column},
58 | year = {2005},
59 | month = mar,
60 | note = {\url{http://www.potaroo.net/ispcol/2005-03/route-sec-2-ispcol.pdf}},
61 | }
62 |
63 | @inproceedings{Akella,
64 | title = "Multihoming Performance Benefits: An Experimental Evaluation of Practical Enterprise Strategies",
65 | author = "Aditya Akella and Srinivasan Seshan and Anees Shaikh",
66 | crossref = "usenix2004"
67 | }
68 |
69 |
70 |
71 | @inproceedings{RON,
72 | author = "David G. Andersen and Hari Balakrishnan and M. Frans Kaashoek and Robert Morris",
73 | title = "{Resilient Overlay Networks}",
74 | crossref = "sosp2001",
75 | pages = {131--145},
76 | }
77 |
78 | @inproceedings{Infranet,
79 | author = {Nick Feamster and Magdalena Balazinska and Greg Harfst and Hari Balakrishnan and David Karger},
80 | title = "{Infranet: Circumventing Web Censorship and Surveillance}",
81 | crossref = "usenixsec2002"
82 | }
83 |
84 |
85 |
86 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
87 |
88 | @proceedings{sigcomm1988,
89 | booktitle = SIGCOMM,
90 | address = "{Stanford, CA}",
91 | month = Aug,
92 | year = 1988
93 | }
94 |
95 | @proceedings{sigcomm1990,
96 | booktitle = SIGCOMM,
97 | address = "{Philadelphia, PA}",
98 | month = sep,
99 | year = 1990
100 | }
101 |
102 | @proceedings{usenix2004,
103 | booktitle = USENIXTECH,
104 | address = {Boston, MA},
105 | month = jun,
106 | year = 2004
107 | }
108 |
109 | @proceedings{nsdi2005,
110 | booktitle = {Proc. 2nd Symposium on Networked Systems Design and Implementation (NSDI)},
111 | address = {Boston, MA},
112 | month = may,
113 | year = 2005
114 | }
115 |
116 |
117 | @proceedings{usenixsec2002,
118 | booktitle = "{Proc. 11th USENIX Security Symposium}",
119 | address = "{San Francisco, CA}",
120 | month = aug,
121 | year = 2002
122 | }
123 |
124 | @proceedings{sosp2001,
125 | booktitle = "{Proc. 18th ACM Symposium on Operating Systems Principles (SOSP)}",
126 | address = "{Banff, Canada}",
127 | month = oct,
128 | year = 2001
129 | }
130 |
131 | @proceedings{nsdi2004,
132 | booktitle = {Proc. First Symposium on Networked Systems Design and Implementation (NSDI)},
133 | address = {San Francisco, CA},
134 | month = mar,
135 | year = 2004
136 | }
137 |
--------------------------------------------------------------------------------
/ex/dga-744/exams.srhtml:
--------------------------------------------------------------------------------
1 | <%= pagetop("15-744 Exams") %>
2 |
3 | Midterm 1. Sample exam from 2004
4 |
5 | Midterm 1 solutions.
6 |
7 | <%= pagebottom() %>
8 |
--------------------------------------------------------------------------------
/ex/dga-744/index.srhtml:
--------------------------------------------------------------------------------
1 | <%= pagetop("15-744, Spring 2007: Computer Networks") %>
2 |
3 |
4 |
5 |
Latest Announcements
6 | <%
7 | require 'yaml'
8 | @ann = YAML::load(File.open("announcements.txt"))
9 | %>
10 |
11 |
12 |
13 | <% @ann[0..1].each { |a| %>
14 | - <%= a["D"] %>: <%= a["T"] %>
15 | - <%= a["C"] %>
16 | <% } %>
17 |
18 |
19 |
20 |
See all announcements
21 |
RSS 2.0 feed
22 |
23 |
24 |
25 |
Overview
26 |
27 | 15-744 is a graduate course in computer networks. The goals are:
28 |
29 | - To understand the state of the art in network protocols, network architecture, and networked systems.
30 | - To understand how to engage in networking research.
31 | - To investigate novel ideas in networking through a semester-long research project.
32 |
33 |
34 |
35 | The past few years have seen a remarkable growth in the global
36 | network infrastructure. The Internet has grown from a research
37 | curiosity to something we all take for granted.
38 |
39 |
40 | How does this network infrastructure work? What are the design principles
41 | upon which it is based, and how are those principles applied in practice?
42 | How can we make the Internet work better today? We will examine these
43 | issues and more during the course.
44 |
45 |
46 |
47 | This course assumes a basic familiarity with networking concepts.
48 | The course will consist of a reading/lecture/discussion component
49 | and a project component. The class will cover approximately 50
50 | research papers on various aspects of computer networking. These
51 | papers will introduce students to the basic design principles on
52 | which today's networks are based. In addition, these papers will
53 | cover recent proposals to improve network performance, functionality
54 | and scalability. Specific topics that will be covered include:
55 | LAN/WAN technologies, congestion/flow control, traffic analysis,
56 | routing, internetworking, multicast, security, and quality of
57 | service. Students are expected to read papers before the class and
58 | participate in the discussion during the class.
59 |
60 |
61 |
62 |
63 | - Lecture time: MW 15:00 - 16:20
64 | - Units: 12
65 | - Location: Wean Hall 4623
66 | - Paper Discussion Page - please login and create an account.
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
Course Staff
76 |
77 |
Teaching Assistants
78 |
79 | Name | Email | Office | Tel | Office Hours |
80 |
81 | Jeff Pang |
82 | jeffpang+744@cs.cmu.edu |
83 | WeH 7203 |
84 | 268-3621 |
85 | Thu 2-3PM (or by appointment) |
86 |
87 |
88 |
89 |
90 |
Instructor
91 |
92 | Name | Email | Office | Tel | Hours |
93 |
94 | David Andersen |
95 | dga AT cs DOT cmu DOT edu |
96 | WeH 8206 |
97 | 268-3064 |
98 | Tues 11:00 - 11:59am |
99 |
100 |
101 |
102 |
Course Secretary
103 |
104 | Barbara Grandillo, bag AT cs DOT cmu DOT edu, Wean Hall 8018, Tel: 268-7550
105 |
106 |
107 |
108 |
109 |
Course Policies
110 |
111 |
Collaboration
112 |
113 |
Students are encouraged to talk to each other, to the course staff,
114 | or to anyone else about any of the assignments.
115 | Assistance must be limited to discussion of the problem and
116 | sketching general approaches to a solution. Each student must write
117 | out his or her own solutions to the homework.
118 |
119 |
120 |
Late Policy
121 |
122 |
123 | - The deadline for any assignment
124 | can be extended with a 10% penalty per day.
125 | - No deadline can be extended by more than two days.
126 | Assignments will NOT
127 | be accepted 48 hours after the due date.
128 | - The project presentations must be given on the day they
129 | are scheduled.
130 |
131 | - If you are ill: Contact the instructor and get a medical note.
132 |
133 |
134 | <%= pagebottom() %>
135 |
--------------------------------------------------------------------------------
/ex/dga-744/lectures.txt:
--------------------------------------------------------------------------------
1 | # This file defines the lectures for the class. The syllabus is
2 | # automatically generated from this file.
3 |
4 | # Date: [Lecture type]
5 | # blank: normal lecture
6 | # noclass [explanation text]
7 | # exam [exam name]
8 | # I: Instructor (overrides the global INSTRUCTOR)
9 | # T: Title
10 | # S: slides ref (looks in lectures/
.{ppt,pdf,ps,html}
11 | # V: Video list (links to coursecast)
12 | # R: Readings (copied verbatim)
13 | # N: Notes (copied verbatim)
14 |
15 | CLASS: 15-744 Computer Networks
16 | CLASS_SHORT: 15-744
17 | YEAR: 2007
18 | TERM: Spring
19 | INSTRUCTOR: DGA
20 | LOCATION: WeH 4623
21 | START_TIME: '15:00'
22 | END_TIME: '16:20'
23 | COURSE_URL: http://www.cs.cmu.edu/~dga/15-744/S07/
24 | READINGBASE: http://www.cs.cmu.edu/~dga/15-744/S07/papers/
25 | SHOW_LECNUM: no
26 | SHOW_INSTRUCTOR: no
27 | ALTERNATE: row
28 | HEADSPAN: 4
29 |
30 | LECTURES:
31 |
32 | - 01/15:
33 | T: Martin Luther King Jr. Day
34 | type: noclass
35 |
36 | - 'Part 1: Internetworking'
37 |
38 | - 1/17:
39 | T: 'Intro: History and context and packet switching.'
40 | S: 01-intro
41 |
42 | - 01/22:
43 | T: 'Internetworking: Architectural principles, names, addresses'
44 | RB: Design::darpa-internet.pdf
45 | S: 02-design
46 |
47 | - 01/24:
48 | T: A best effort world, placement of function (reliability, security, etc.)
49 | RB: Saltzer84::saltzer-e2e.pdf Architecture::alf.pdf
50 | S: 03-besteffort
51 | N: |
52 | Read the End-to-End Arguments paper (Saltzer84)
if you
53 | haven't seen it before.
54 |
55 | - 01/26:
56 | T: Recitation - background material review (Jeff)
57 | type: recitation
58 | N: Wean 4615A, 3:00 - 4:30pm.
59 | S: r01-review
60 |
61 | - 01/29:
62 | T: Interdomain Routing
63 | RB: GR::gao-rexford.pdf
64 | N: Only read sections 1, 3, skim 6, and 7 of GR for today
65 | S: 04-interdomain
66 |
67 | - 'Part 2: Resource Management'
68 |
69 | - 01/31:
70 | T: End-to-End Congestion Control
71 | RB: CJ89::chiujain.pdf VJ88::congavoid.pdf
72 | S: 05-congctl
73 | N: For more examples of Reno/NewReno/etc., see the ppt slides from 744 in 2004
74 |
75 | - 02/05:
76 | T: No lecture. Meetings about projects.
77 |
78 | - 02/07:
79 | T: Router congestion control
80 | RB: RED::red.pdf XCP::xcp.pdf
81 | S: 06-router-cong
82 |
83 | - 02/12:
84 | T: Fair Queueing
85 | RB: WFQ::fq.pdf CSFQ::csfq.pdf
86 | S: 07-fairqueue
87 |
88 | - 02/14:
89 | T: Quality of Service
90 | RB: She95::beyondbesteffort.pdf CSZ92::csz.pdf
91 | N: Project proposals due
92 | S: 08-qos
93 |
94 | - 02/16:
95 | T: ns-2 and tools (Jeff)
96 | type: recitation
97 | N: Wean Hall 5409, 3:00-4:30PM
98 |
99 | - 02/19:
100 | T: Router Design
101 | S: 09-bfr
102 | RB: MGR::50gb.ps iSLIP::islip-ton.pdf
103 | N: 'Optional reading: D+97 (the "Lulea" algorithm)'
104 |
105 | - 'Part 3: Wireless'
106 |
107 | - 02/21:
108 | T: Wireless Networks overview and architectures
109 | RB: Macaw::macaw.pdf
110 | S: 10-wireless1
111 |
112 | - 02/26:
113 | T: Wireless Networks in the real world
114 | RB: Chaotic::http://www.cs.cmu.edu/afs/cs/project/cmcl/archive/2005/mobicomchaotic.pdf
115 | S: 11-wireless2
116 |
117 | - 02/28:
118 | T: Quiz 1
119 | type: exam
120 |
121 | - 03/05:
122 | T: Routing in ad-hoc networks
123 | S: 12-adhoc
124 | RB: ETX::decouto-etx2003.pdf MANET1::broch-mobicom98.ps MANET2::royer-adhoc1999.pdf
125 | N: 'Second MANET reading is mostly to flesh out the picture
Related: Roofnet Publications (In particular, Mobicom2005, Sigcomm2005, Sigcomm2004 papers)'
126 |
127 | - 03/07:
128 | T: Making the Best of Broadcast
129 | RB: ExOR::biswas-exor2005.pdf XorsInTheAir::xor.pdf
130 | N: 'ExOR SIGCOMM talk Slides: ppt, PDF.'
131 | S: 13-broadcast
132 |
133 | - 03/12:
134 | T: Spring Break
135 | type: noclass
136 |
137 | - 03/14:
138 | T: Spring Break
139 | type: noclass
140 |
141 | - 03/19:
142 | T: Mobility
143 | S: 14-mobility
144 | RB: MobileIP::ieee-mobileip98.pdf TCPMigrate::snoeren-e2emobility.pdf
145 |
146 | - 'Part 4: Applications, Naming, and Overlays'
147 |
148 | - 03/21:
149 | T: Overlay Networks 1
150 | RB: RON::http://www.cs.cmu.edu/~dga/papers/ron-sosp2001.pdf GIA::p407-chawathe.pdf
151 | N: 'No slides. An overview of overlay networks and 15-441 notes on p2p.'
152 |
153 | - 03/26:
154 | T: Distributed Hash Tables
155 | RB: DHTSurvey::p43-balakrishnan.pdf Chord::p12-stoica.pdf
156 | S: 16-dht
157 | N: 'See also DHT Geometry Comparison paper.'
158 |
159 | - 03/28:
160 | T: No class - project meetings
161 |
162 | - 04/02:
163 | T: DNS and the Web
164 | RB: DNS::dns.pdf Coral::coral-nsdi04.pdf
165 | S: 17-dnsweb
166 | N: 'Mike Freedman, the author of Coral, will be giving a job talk here on Monday the 9th, if people are interested.
For more DNS, see DNS Performance and the Effectiveness of Caching'
167 |
168 | - 04/04:
169 | T: What's in a name? Names, identifiers, and network architecture
170 | RB: DOA::doa-osdi04.pdf i3::i3-sigcomm02.pdf
171 | S: 18-naming
172 |
173 | - 'Part 5: Measurement, Mining, (and Multicast...)'
174 |
175 | - 04/09:
176 | T: Measurement
177 | RB: Paxson:Measurement::meas-strategies-imc04.pdf
178 | S: 19-measurement
179 |
180 | # dga is at NSDI on 4/11
181 | - 04/11:
182 | T: 'Guest Lecture - Christos Faloutsos: Data Mining Tools for Large Graphs'
183 | N: Networks are filled with interesting graphs - the Web, the AS graph, the router topology, etc. This lecture will examine some techniques for analyzing them to extract meaningful information.
184 | RB: RatioRules::http://www.cs.cmu.edu/%7Echristos/PUBLICATIONS/ratioRules.pdf TrafficBehavior::http://www.cs.cmu.edu/%7Echristos/PUBLICATIONS/performance02.pdf
185 | S: 20-mining
186 |
187 |
188 | - 04/16:
189 | T: Multicast
190 | N: Presented by Jeff
191 | RB: SRM::srm.ps
192 | S: 21-multicast
193 |
194 | - 'Part 6: Security'
195 |
196 | - 04/18:
197 | T: 'Security: DDoS and Traceback'
198 | RB: Traceback::p1-snoeren.pdf TVA::paper-YanWet.pdf
199 | S: 22-ddos
200 |
201 | - 04/23:
202 | T: 'Security: Worms'
203 | RB: OwningTheInternet::http://www.icir.org/vern/papers/cdc-usenix-sec02/ Fingerprinting::fingerprinting-osdi04.pdf
204 |
205 | - 04/25:
206 | T: Second In-Class Exam
207 | type: exam
208 |
209 | - 04/30:
210 | T: Project Presentations 1
211 |
212 |
213 | - 05/02:
214 | T: Project Presentations 2
215 |
216 | - 05/14:
217 | T: Project writeups due
218 | type: exam
219 |
220 |
--------------------------------------------------------------------------------
/ex/dga-744/pagebottom.srhtml:
--------------------------------------------------------------------------------
1 |
2 | Last updated: <%= Time.now %>
3 | [validate xhtml]
4 |
5 |