diff options
| author | Nick Mathewson <nickm@torproject.org> | 2003-05-17 06:10:20 +0000 |
|---|---|---|
| committer | Nick Mathewson <nickm@torproject.org> | 2003-05-17 06:10:20 +0000 |
| commit | 1d07a97300d48872726edd989f53bf489dc00a41 (patch) | |
| tree | baa19dd713b183d6694364251b6e17afe9195b0f | |
| parent | 11fddbc0273c37d651399ec782c57065f8030a76 (diff) | |
| download | anonbib-1d07a97300d48872726edd989f53bf489dc00a41.tar.gz | |
Initial revision
svn:r2
| -rw-r--r-- | BibTeX.py | 637 | ||||
| -rw-r--r-- | TODO | 21 | ||||
| -rw-r--r-- | perl/BibTeX.pm | 301 | ||||
| -rw-r--r-- | perl/PDOSBib.pm | 211 | ||||
| -rw-r--r-- | perl/PDOSCGI.pm | 68 | ||||
| -rw-r--r-- | perl/bibtex-entry.cgi | 206 | ||||
| -rw-r--r-- | perl/mkpdospubs.pl | 235 | ||||
| -rw-r--r-- | perl/pubs-date.cgi | 274 | ||||
| -rw-r--r-- | testbib/pdos.bib | 1742 | ||||
| -rw-r--r-- | writeHTML.py | 5 |
10 files changed, 3700 insertions, 0 deletions
diff --git a/BibTeX.py b/BibTeX.py new file mode 100644 index 0000000..07e3b66 --- /dev/null +++ b/BibTeX.py @@ -0,0 +1,637 @@ +#!/usr/bin/python + +import cStringIO +import re +import sys + +INITIAL_STRINGS = { + 'jan' : 'January', 'feb' : 'February', + 'mar' : 'March', 'apr' : 'April', + 'may' : 'May', 'jun' : 'June', + 'jul' : 'July', 'aug' : 'August', + 'sep' : 'September', 'oct' : 'October', + 'nov' : 'November', 'dec' : 'December' + } + +class ParseError(Exception): + pass + +class BibTeX: + def __init__(self): + self.entries = [] + self.byKey = {} + def addEntry(self, ent): + k = ent.key + if self.byKey.get(ent.key): + print >> sys.stderr, "Already have an entry named %s"%k + return + self.entries.append(ent) + self.byKey[ent.key] = ent + def resolve(self): + seen = {} + for ent in self.entries: + seen.clear() + while ent.get('crossref'): + try: + cr = self.byKey[ent['crossref'].lower()] + except KeyError: + print "No such crossref: %s", ent['crossref'] + print ent + break + if seen.get(cr.key): + raise ParseError("Circular crossref at %s" % ent.key) + seen[cr.key] = 1 + del ent.entries['crossref'] + ent.entries.update(cr.entries) + ent.resolve() + +DISPLAYED_FIELDS = [ 'title', 'author', 'journal', 'booktitle', +'school', 'institution', 'organization', 'volume', 'number', 'year', +'month', 'address', 'chapter', 'edition', 'pages', 'editor', +'howpublished', 'key', 'publisher', 'type', 'note' ] + +class BibTeXEntry: + def __init__(self, type, key, entries): + self.type = type + self.key = key + self.entries = entries + self._get = self.entries.__getitem__ + def get(self, k, v=None): + return self.entries.get(k,v) + def __getitem__(self, k): + return self._get(k) + def __str__(self): + return self.format(70,1) + def format(self, width=70,v=0): + d = ["@%s{%s,\n" % (self.type, self.key)] + if v: + df = DISPLAYED_FIELDS[:] + for k in self.entries.keys(): + if k not in df: + df.append(k) + else: + df = DISPLAYED_FIELDS + for f in df: + if not self.entries.has_key(f): + continue + v = self.entries[f] + d.append(" ") + s = "%s = {%s}\n" % (f, v) + d.append(_split(s,width)) + d.append("}\n") + return "".join(d) + def resolve(self): + a = self.get('author') + if a: + self.parsedAuthor = parseAuthor(a) + #print a + #print " => ",repr(self.parsedAuthor) + else: + self.parsedAuthor = None + def check(self): + ok = 1 + if self.type == 'inproceedings': + fields = 'booktitle', 'month', 'year' + elif self.type == 'article': + fields = 'journal', 'month', 'year' + elif self.type == 'techreport': + fields = 'institution', 'number' + elif self.type == 'misc': + fields = 'howpublished', + else: + fields = () + fields += 'title', 'author' + + for field in fields: + if not self.get(field): + print "ERROR: %s has no %s field" % (self.key, field) + self.entries[field] = "<b>???</b>" + ok = 0 + + return ok + + def biblio_to_html(self): + if self.type == 'inproceedings': + booktitle = self['booktitle'] + bookurl = self.get('bookurl') + if bookurl: + m = PROCEEDINGS_RE.match(booktitle) + if m: + res = ["In the ", m.group(1), + '<a href="%s">'%bookurl, m.group(2), "</a>"] + else: + res = ['In the <a href="%s">%s</a>' % (bookurl,booktitle)] + else: + res = ["In the ", booktitle ] + + if self.get("edition"): + res.append(",") + res.append(self['edition']) + if self.get("address"): + res.append(",") + res.append(self['address']) + res.append(", %s %s" % (self['month'], self['year'])) + if not self.get('pages'): + pass + elif "-" in self['pages']: + res.append(", pages %s"%self['pages']) + else: + res.append(", page %s"%self['pages']) + elif self.type == 'article': + res = ["In "] + if self.get('journalurl'): + res.append('<a href="%s">%s</a>'% + (self['journalurl'],self['journal'])) + else: + res.append(self['journal']) + if self.get('volume'): + res.append(" <b>%s</b>"%self['volume']) + if self.get('number'): + res.append("(%s)"%self['number']) + res.append(", %s %s" % (self['month'], self['year'])) + if not self.get('pages'): + pass + elif "-" in self['pages']: + res.append(", pages %s"%self['pages']) + else: + res.append(", page %s"%self['pages']) + elif self.type == 'techreport': + res = [ "%s %s %s" % (self['institution'], + self.get('type', 'technical report'), + self['number']) ] + if self.get('month') or self.get('year'): + res.append(", %s %s" % (self.get('month', ''), + self.get('year', ''))) + elif self.type == 'mastersthesis' or self.type == 'phdthesis': + if self.get('type'): + res = [self['type']] + elif type == 'mastersthesis': + res = ["Masters's thesis"] + else: + res = ["Ph.D. thesis"] + if self.get('school'): + res.append(", %s"%(self['school'])) + if self.get('month') or self.get('year'): + res.append(", %s %s" % (self.get('month', ''), + self.get('year', ''))) + elif self.type == 'misc': + res = [self['howpublished']] + if self.get('month') or self.get('year'): + res.append(", %s %s" % (self.get('month', ''), + self.get('year', ''))) + if not self.get('pages'): + pass + elif "-" in self['pages']: + res.append(", pages %s"%self['pages']) + else: + res.append(", page %s"%self['pages']) + else: + res = ["<Odd type %s>"%self.type] + + res[0:0] = ["<span class='biblio'>"] + res.append("</span ") + + res.append("<span class='availability'>" + "(<a href='__'>BibTex  entry<a>)") + return htmlize("".join(res)) + + def to_html(self): + res = ["<li><p class='entry'><span class='title'>%s</span>"%( + htmlize(self['title']))] + availability = [] + for key, name in (('www_abstract_url', 'abstract'), + ('www_html_url', 'HTML'), + ('www_pdf_url', 'PDF'), + ('www_ps_url', 'PS'), + ('www_ps_gz_url', 'gzipped PS')): + url = self.get('key') + if not url: continue + availability.append('<a href="%s">%s</a>' %(url,name)) + if availability: + res.append(" <span class='availability'>(") + res.append(", ".join(availability)) + res.append("</span") + res.append("<br>") + + #res.append("\n<!-- %r -->\n" % self.parsedAuthor) + htmlAuthors = [] + for author in self.parsedAuthor: + f,v,l,j = author.first,author.von,author.last,author.jr + a = " ".join(f+v+l) + if j: + a = "%s, %s" %(a,j) + htmlAuthors.append(htmlize(a)) + if len(htmlAuthors) == 1: + res.append(htmlAuthors[0]) + elif len(htmlAuthors) == 2: + res.append(" and ".join(htmlAuthors)) + else: + res.append(", ".join(htmlAuthors[:-1])) + res.append(", and ") + res.append(htmlAuthors[-1]) + + if res[-1][-1] != '.': + res.append(".") + res.append("</span><br>\n") + res.append(self.biblio_to_html()) + res.append("</p></li>\n\n") + return "".join(res) + +RE_LONE_AMP = re.compile(r'&([^a-z0-9])') +RE_LONE_I = re.compile(r'\\i([^a-z0-9])') +RE_ACCENT = re.compile(r'\\([\'`~^"])(.)') +ACCENT_MAP = { "'": 'acute', "`" : 'grave', "~": 'tilde', + "^": 'circ', '"' : 'uml' } +RE_TEX_CMD = re.compile(r"(?:\\[a-zA-Z@]+|\\.)") +RE_PAGE_SPAN = re.compile(r"(\d)--(\d)") +def htmlize(s): + s = RE_LONE_AMP.sub(lambda m: "&%s" % m.group(1), s) + s = RE_LONE_I.sub(lambda m: "i%s" % m.group(1), s) + s = RE_ACCENT.sub(lambda m: "&%s%s;" %(m.group(2), + ACCENT_MAP[(m.group(1))]), + s) + s = RE_TEX_CMD.sub("", s) + s = s.translate(ALLCHARS, "{}") + s = RE_PAGE_SPAN.sub(lambda m: "%s-%s"%(m.groups()), s) + return s + +PROCEEDINGS_RE = re.compile( + r'((?:proceedings|workshop record) of(?: the)? )(.*)', + re.I) + + +class ParsedAuthor: + def __init__(self, first, von, last, jr): + self.first = first + self.von = von + self.last = last + self.jr = jr + def __repr__(self): + return "ParsedAuthor(%r,%r,%r,%r)"%(self.first,self.von, + self.last,self.jr) + def __str__(self): + return " ".join(self.first+self.von+self.last+self.jr) + +def _split(s,w=79): + r = [] + s = s.replace("\n", " ") + while len(s) > w: + for i in xrange(w-1, 0, -1): + if s[i] == ' ': + r.append(s[:i]) + s = s[i+1:] + break + else: + r.append(s[:w]) + s = s[w:] + r.append(s) + r.append("") + return "\n".join(r) + +class FileIter: + def __init__(self, fname=None, file=None, it=None, string=None): + if fname: + file = open(fname, 'r') + if string: + file = cStringIO.StringIO(string) + if file: + it = iter(file.xreadlines()) + self.iter = it + assert self.iter + self.lineno = 0 + self._next = it.next + def next(self): + self.lineno += 1 + return self._next() + + +def parseAuthor(s): + items = [] + + #print "A", `s` + s = s.strip() + while s: + s = s.strip() + bracelevel = 0 + for i in xrange(len(s)): + if s[i] == '{': + bracelevel += 1 + elif s[i] == '}': + bracelevel -= 1 + elif bracelevel <= 0 and s[i] in " \t\n,": + break + if i+1 == len(s): + items.append(s) + else: + items.append(s[0:i]) + if (s[i] == ','): + items.append(',') + s = s[i+1:] + + #print "B", items + + authors = [[]] + for item in items: + if item == 'and': + authors.append([]) + else: + authors[-1].append(item) + + #print "C", authors + + parsedAuthors = [] + # Split into first, von, last, jr + for author in authors: + #print author + + commas = 0 + fvl = [] + vl = [] + f = [] + v = [] + l = [] + j = [] + cur = fvl + for item in author: + if item == ',': + if commas == 0: + vl = fvl + fvl = [] + cur = f + else: + j.extend(f) + f = [] + else: + cur.append(item) + if commas == 0: + split_von(f,v,l,fvl) + else: + split_von(None,v,l,vl) + + parsedAuthors.append(ParsedAuthor(f,v,l,j)) + #print " ====> ", parsedAuthors[-1] + + return parsedAuthors + +ALLCHARS = "".join(map(chr,range(256))) +LC_CHARS = "abcdefghijklmnopqrstuvwxyz" +SV_DELCHARS = ("ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "@") +RE_ESCAPED = re.compile(r'\\.') +def split_von(f,v,l,x): + in_von = 0 + while x: + tt = t = x[0] + del x[0] + if tt[:2] == '{\\': + tt = tt.translate(ALLCHARS, SV_DELCHARS) + tt = RE_ESCAPED.sub("", tt) + tt = tt.translate(ALLCHARS, "{}") + if tt.translate(ALLCHARS, LC_CHARS) == "": + v.append(t) + in_von = 1 + elif in_von and f is not None: + l.append(t) + l.extend(x) + return + else: + f.append(t) + if not in_von: + l.append(f[-1]) + del f[-1] + +class Parser: + def __init__(self, fileiter, initial_strings): + self.strings = INITIAL_STRINGS.copy() + self.strings.update(initial_strings) + self.fileiter = fileiter + self.entries = {} + self.result = BibTeX() + self.litStringLine = 0 + self.entryLine = 0 + + def _parseKey(self, line): + it = self.fileiter + line = _advance(it,line) + m = KEY_RE.match(line) + if not m: + raise ParseError("Expected key at line %s"%self.fileiter.lineno) + key, line = m.groups() + return key, line + + def _parseValue(self, line): + it = self.fileiter + bracelevel = 0 + data = [] + while 1: + line = _advance(it,line) + line = line.strip() + assert line + + # Literal string? + if line[0] == '"': + line=line[1:] + self.litStringLine = it.lineno + while 1: + if bracelevel: + m = BRACE_CLOSE_RE.match(line) + if m: + data.append(m.group(1)) + data.append('}') + line = m.group(2) + bracelevel -= 1 + continue + else: + m = STRING_CLOSE_RE.match(line) + if m: + data.append(m.group(1)) + line = m.group(2) + break + m = BRACE_OPEN_RE.match(line) + if m: + data.append(m.group(1)) + line = m.group(2) + bracelevel += 1 + continue + data.append(line) + line = it.next() + self.litStringLine = 0 + elif line[0] == '{': + bracelevel += 1 + line = line[1:] + while bracelevel: + m = BRACE_CLOSE_RE.match(line) + if m: + #print bracelevel, "A", repr(m.group(1)) + data.append(m.group(1)) + bracelevel -= 1 + if bracelevel > 0: + #print bracelevel, "- '}'" + data.append('}') + line = m.group(2) + continue + m = BRACE_OPEN_RE.match(line) + if m: + bracelevel += 1 + #print bracelevel, "B", repr(m.group(1)) + data.append(m.group(1)) + line = m.group(2) + continue + else: + #print bracelevel, "C", repr(line) + data.append(line) + line = it.next() + elif line[0] == '#': + print >>sys.stderr, "Weird concat on line %s"%it.lineno + elif line[0] in "},": + if not data: + print >>sys.stderr, "No data after field on line %s"%( + it.lineno) + else: + m = RAW_DATA_RE.match(line) + if m: + s = self.strings.get(m.group(1).lower()) + if s is not None: + data.append(s) + else: + data.append(m.group(1)) + line = m.group(2) + else: + raise ParseError("Questionable line at line %s"%it.lineno) + + + # Got a string, check for concatenation. + line = _advance(it,line) + line = line.strip() + assert line + if line[0] == '#': + line = line[1:] + else: + return "".join(data), line + + def _parseEntry(self, line): #name, strings, entries + it = self.fileiter + self.entryLine = it.lineno + line = _advance(it,line) + m = BRACE_BEGIN_RE.match(line) + if not m: + raise ParseError("Expected an opening brace at line %s"%it.lineno) + line = m.group(1) + + proto = { 'string' : 'p', + 'preamble' : 'v', + }.get(self.curEntType, 'kp*') + + v = [] + while 1: + line = _advance(it,line) + + m = BRACE_END_RE.match(line) + if m: + line = m.group(1) + break + if not proto: + raise ParseError("Overlong entry starting on line %s" + % self.entryLine) + elif proto[0] == 'k': + key, line = self._parseKey(line) + v.append(key) + elif proto[0] == 'v': + value, line = self._parseValue(line) + v.append(value) + elif proto[0] == 'p': + key, line = self._parseKey(line) + v.append(key) + line = _advance(it,line) + line = line.lstrip() + if line[0] == '=': + line = line[1:] + value, line = self._parseValue(line) + v.append(value) + else: + assert 0 + line = line.strip() + if line and line[0] == ',': + line = line[1:] + if proto and proto[1:] != '*': + proto = proto[1:] + if proto and proto[1:] != '*': + raise ParseError("Missing arguments to %s on line %s" % ( + self.curEntType, self.entryLine)) + + if self.curEntType == 'string': + self.strings[v[0]] = v[1] + elif self.curEntType == 'preamble': + pass + else: + key = v[0] + d = {} + for i in xrange(1,len(v),2): + d[v[i].lower()] = v[i+1] + ent = BibTeXEntry(self.curEntType, key, d) + self.result.addEntry(ent) + + return line + + def parse(self): + try: + self._parse() + except StopIteration: + if self.litStringLine: + raise ParseError("Unexpected EOF in string (%s)" % + self.litStringLine) + elif self.entryLine: + raise ParseError("Unexpected EOF at line %s (%s)" % ( + self.fileiter.lineno, self.entryLine)) + + return self.result + + def _parse(self): + it = self.fileiter + line = it.next() + while 1: + while not line or line.isspace() or OUTER_COMMENT_RE.match(line): + line = it.next() + m = ENTRY_BEGIN_RE.match(line) + if m: + self.curEntType = m.group(1).lower() + line = m.group(2) + line = self._parseEntry(line) + self.entryLine = 0 + else: + raise ParseError("Bad input at line %s (expected a new entry.)" + % it.lineno) + +def _advance(it,line): + while not line or line.isspace() or COMMENT_RE.match(line): + line = it.next() + return line + +OUTER_COMMENT_RE = re.compile(r'^\s*[\#\%]') +COMMENT_RE = re.compile(r'^\s*\%') +ENTRY_BEGIN_RE = re.compile(r'''^\s*\@([^\s\"\%\'\(\)\,\=\{\}]+)(.*)''') +BRACE_BEGIN_RE = re.compile(r'\s*\{(.*)') +BRACE_END_RE = re.compile(r'\s*\}(.*)') +KEY_RE = re.compile(r'''\s*([^\"\#\%\'\(\)\,\=\{\}\s]+)(.*)''') + +STRING_CLOSE_RE = re.compile(r'^([^\{\}\"]*)\"(.*)') +BRACE_CLOSE_RE = re.compile(r'^([^\{\}]*)\}(.*)') +BRACE_OPEN_RE = re.compile(r'^([^\{\}]*\{)(.*)') +RAW_DATA_RE = re.compile(r'^([^\s\},]+)(.*)') + +if __name__ == '__main__': + f = FileIter(fname="testbib/pdos.bib") + p = Parser(f, {}) + print p + r = p.parse() + r.resolve() + for e in r.entries: + print e + for e in r.entries: + if e.type in ("proceedings", "journal"): continue + e.check() + for e in r.entries: + if e.type in ("proceedings", "journal"): continue + print e.to_html() + @@ -0,0 +1,21 @@ + +First usable python version: +6 - Port what's there to python +1 - Automate generation; delay implementing search? +0 X I need a CGI for submitting changes? Probably not. +2 - Make an HTML file with many anchors to hold the BiBTeX stuff. +0 X Cached parsed BibTeX, if we have any reason to do so. + - Integrate two files: search for duplicates, return everything else. + - Matching +15 min - Very dumb match: is everything the same? (For all fields) +1 - Dumb match: Can we find something that has the same title + and the same year and the same authors? If so, and some + other fields differ, dump out both version in third file. +4 - Less dumb match: As above, but with some fuzziness in + authors and titles. +1.5 - CLI and real code +2 - Cleaning +1 - CLI +1 - "Important" note. + +~ 20-21 hours. diff --git a/perl/BibTeX.pm b/perl/BibTeX.pm new file mode 100644 index 0000000..35d3467 --- /dev/null +++ b/perl/BibTeX.pm @@ -0,0 +1,301 @@ +package BibTeX; +use Symbol 'qualify_to_ref'; + +%bibtex_prototypes = ('string' => 'p', 'preamble' => 'v', '_' => 'kp*'); + +sub parse_bibtex_key ($) { + my($fh) = @_; + $_ = <$fh> while ((/^\s+$/s || /^\s+%/) && !eof $fh); + if (/^\s*([^"#%'(),={}\s]+)(.*)/s) { + $_ = $2; + lc($1); + } else { + print STDERR "no key at line $.\n"; + ""; + } +} + +sub parse_bibtex_value ($$) { + my($fh, $strings) = @_; + my($data) = ""; + my($bracelevel, $line); + + # loop over concatenation + while (1) { + + # loop over lines + $_ = <$fh> while ((/^\s+$/s || /^\s+%/) && !eof $fh); + s/^\s+//; + if (eof $fh) { + print STDERR "unexpected end of file\n"; + return $data; + } + + # check type of thing + if (/^\"(.*)/s) { + $_ = $1; + $bracelevel = 0; + $line = $.; + while (1) { + if (!$bracelevel && /^([^{}\"]*)\"(.*)/s) { + $data .= $1; + $_ = $2; + last; + } elsif ($bracelevel && /^([^{}]*\})(.*)/s) { + $data .= $1; + $_ = $2; + $bracelevel--; + } elsif (/^([^{}]*\{)(.*)/s) { + $data .= $1; + $_ = $2; + $bracelevel++; + } else { + $data .= $_; + die "end of file within quotes started at line $line" if eof $fh; + $_ = <$fh>; + } + } + + } elsif (/^\{(.*)/s) { + $_ = $1; + $bracelevel = 1; + $line = $.; + while ($bracelevel) { + if (/^([^{}]*)\}(.*)/s) { + $data .= $1; + $data .= "}" if $bracelevel > 1; + $_ = $2; + $bracelevel--; + } elsif (/^([^{}]*\{)(.*)/s) { + $data .= $1; + $_ = $2; + $bracelevel++; + } else { + $data .= $_; + die "end of file within braces started at line $line" if eof $fh; + $_ = <$fh>; + } + } + + } elsif (/^\#/) { + # do nothing + print STDERR "warning: odd concatenation at line $.\n"; + } elsif (/^[\},]/) { + print STDERR "no data after field at line $.\n" if $data eq ''; + return $data; + } elsif (/^([^\s\},]+)(.*)/s) { + if ($strings->{lc($1)}) { + $data .= $strings->{lc($1)}; + } else { + $data .= $1; + } + $_ = $2; + } + + # got a single string, check for concatenation + $_ = <$fh> while ((/^\s+$/s || /^\s+%/) && !eof $fh); + s/^\s+//; + if (/^\#(.*)/s) { + $_ = $1; + } else { + return $data; + } + } +} + +sub parse_bibtex_entry ($$$$) { + # uses caller's $_ + my($fh, $name, $strings, $entries) = @_; + my($entryline) = $.; + + $_ = <$fh> while /^\s+$/ && !eof $fh; + if (/^\s*\{(.*)/s) { + $_ = $1; + } else { + print STDERR "no open brace after \@$name starting at line $entryline\n"; + return []; + } + + # get prototype + my($prototype) = $bibtex_prototypes{$name}; + $prototype = $bibtex_prototypes{'_'} if !defined $prototype; + + # parse entry into `@v' + my(@v, $a, $b); + while (!eof $fh) { + $_ = <$fh> while /^\s*$/ && !eof $fh; + if (/^\s*\}(.*)/s) { + $_ = $1; + last; + } elsif ($prototype =~ /^k/) { + push @v, parse_bibtex_key($fh); + } elsif ($prototype =~ /^v/) { + push @v, parse_bibtex_value($fh, $strings); + } elsif ($prototype =~ /^p/) { + push @v, parse_bibtex_key($fh); + $_ = <$fh> while /^\s+$/ && !eof $fh; + s/^\s+\=?//; + push @v, parse_bibtex_value($fh, $strings); + } + $_ = <$fh> while /^\s*$/ && !eof $fh; + s/^\s*,?//; + $prototype = substr($prototype, 1) + if $prototype && $prototype !~ /^.\*/; + } + print STDERR "missing args to \@$name at line $.\n" + if $prototype && $prototype !~ /^.\*/; + + # do something with entry + if ($name eq 'string') { + $strings->{$v[0]} = $v[1]; + } elsif ($name eq 'preamble') { + # do nothing + } else { + my($key) = shift @v; + $entries->{$key} = {@v}; + $entries->{$key}->{'_type'} = $name; + $entries->{$key}->{'_key'} = $key; + push @{$entries->{'_'}}, $key; + } +} + +sub parse (*;\%) { + my($fh) = qualify_to_ref(shift, caller); + my($initial_strings) = @_; + my($strings) = $initial_strings; + + my($curname, $garbage, %entries); + local($_) = ''; + while (<$fh>) { + + if (/^\s*[%\#]/ || /^\s*$/) { + # comment + + } elsif (/^\s*\@([^\s\"\#%\'(),={}]+)(.*)/s) { + $curname = lc($1); + $_ = $2; + parse_bibtex_entry($fh, $curname, $strings, \%entries); + + } else { + print STDERR "garbage at line $.\n" if !defined $garbage; + $garbage = 1; + } + } + + \%entries; +} + +sub expand ($$) { + my($e, $key) = @_; + my(%d) = %{$e->{$key}}; + while ($d{'crossref'}) { + my($v) = $d{'crossref'}; + delete $d{'crossref'}; + %d = (%{$e->{$v}}, %d); + } + \%d; +} + + +sub split_von ($$$@) { + my($f, $v, $l, @x) = @_; + my(@pre, $t, $in_von, $tt); + while (@x) { + $t = $tt = shift @x; + if ($tt =~ /^\{\\/) { + $tt =~ s/\\[A-Za-z@]+//g; + $tt =~ s/\\.//g; + $tt =~ tr/{}//d; + } + if ($tt =~ /^[a-z]/) { + push @$v, $t; + $in_von = 1; + } elsif ($in_von || !ref($f)) { + push @$l, $t, @x; + return; + } else { + push @$f, $t; + } + } + if (!$in_von) { + push @$l, (pop @$f); + } +} + +sub parse_author ($) { + local($_) = @_[0]; + my(@x) = (); + my($pos, $pos0, $t, $bracelevel); + + # move text into @x + while (!/^\s*$/) { + s/^\s+//; + $pos = 0; + while ($pos < length) { + $t = substr($_, $pos, 1); + if ($t eq '{') { + $bracelevel++; + } elsif ($t eq '}') { + $bracelevel--; + } elsif ($bracelevel <= 0) { + last if ($t =~ /[\s,]/); + } + $pos++; + } + + push @x, substr($_, 0, $pos); + if ($t eq ',') { + push @x, ','; + $pos++; + } + $_ = substr($_, $pos); + } + + # split @x into arrays based on `and' + my(@aa) = ([]); + foreach $t (@x) { + if ($t eq 'and') { + push @aa, [] if @{$aa[-1]} > 0; + } else { + push @{$aa[-1]}, $t; + } + } + + # massage each subarray into four parts: first, von, last, jr + my(@aaa) = (); + foreach $t (@aa) { + my(@fvl, @vl, @v, @l, @f, @j, $cur, $commas); + $cur = \@fvl; $commas = 0; + + # split into subarrays if possible + foreach $x (@$t) { + if ($x eq ',') { + if ($commas == 0) { + @vl = @fvl; + @fvl = (); + $cur = \@f; + } else { + push @j, @f; + @f = (); + } + $commas++; + } else { + push @$cur, $x; + } + } + + # split out the `von' part + if ($commas == 0) { + split_von(\@f, \@v, \@l, @fvl); + } else { + split_von(0, \@v, \@l, @vl); + } + + # store as an array of arrays + push @aaa, [[@f], [@v], [@l], [@j]]; + } + + @aaa; +} + +1; diff --git a/perl/PDOSBib.pm b/perl/PDOSBib.pm new file mode 100644 index 0000000..acc7a9c --- /dev/null +++ b/perl/PDOSBib.pm @@ -0,0 +1,211 @@ +package main; + +# maps regexps, which are applied to authors, to their home page URLs +@author_urls = + ('Engler' => 'http://www.pdos.lcs.mit.edu/~engler/', + 'Kaashoek' => 'http://www.pdos.lcs.mit.edu/~kaashoek/', + 'Blake' => 'http://www.pdos.lcs.mit.edu/cb/', + 'Mazières' => 'http://www.scs.cs.nyu.edu/~dm/', + 'Ganger' => 'http://www.ece.cmu.edu/~ganger/', + 'Grimm' => 'http://www.cs.washington.edu/homes/rgrimm/', + 'Hsieh' => 'http://www2.cs.utah.edu/~wilson/', + 'Briceño' => 'http://mit.edu/hbriceno/www/', + 'Wallach' => 'http://www.pdos.lcs.mit.edu/~kerr/', + 'Candea' => 'http://www.cs.stanford.edu/~candea/', + 'Kohler' => 'http://www.pdos.lcs.mit.edu/~eddietwo/', + 'Kirk.*Johnson' => 'http://www.cs.colorado.edu/~tuna/', + 'Weihl' => 'http://www.research.digital.com/SRC/staff/weihl/', + 'Nygren' => 'http://www.mit.edu/people/nygren/', + 'Anthony.*Joseph' => 'http://www.cs.berkeley.edu/~adj/', + 'Poletto' => 'http://www.pdos.lcs.mit.edu/~maxp/', + 'Kaminsky' => 'http://www.pdos.lcs.mit.edu/~kaminsky/', + 'Morris' => 'http://www.pdos.lcs.mit.edu/~rtm/', + 'Jannotti' => 'http://www.jannotti.com/', + 'Benjie' => 'http://www.pdos.lcs.mit.edu/~benjie/', + 'Jinyang' => 'http://www.pdos.lcs.mit.edu/~jinyang/', + 'Douglas.*outo' => 'http://www.pdos.lcs.mit.edu/~decouto/', + 'Kevin.*Fu' => 'http://snafu.fooworld.org/~fubob/', + 'Karger' => 'http://theory.lcs.mit.edu/~karger/', + 'Dabek' => 'http://pdos.lcs.mit.edu/~fdabek/', + 'Brunskill' => 'http://pdos.lcs.mit.edu/~emma/', + 'Balakrishnan' => 'http://nms.lcs.mit.edu/~hari/', + 'Stoica' => 'http://www.cs.berkeley.edu/~istoica/', + 'Andersen' => 'http://nms.lcs.mit.edu/~dga/', + 'Snoeren' => 'http://nms.lcs.mit.edu/~snoeren/', + 'Freedman' => 'http://www.pdos.lcs.mit.edu/~mfreed/', + 'Emil.*Sit' => 'http://www.mit.edu/~sit/', + 'Nick.*Feamster' => 'http://nms.lcs.mit.edu/~feamster/', + ); + +# don't print entries for these types, which are only used for crossreferences +%dont_print = + ('proceedings' => 1, 'journal' => 1); + +%initial_strings = + ('jan' => 'January', 'feb' => 'February', + 'mar' => 'March', 'apr' => 'April', + 'may' => 'May', 'jun' => 'June', + 'jul' => 'July', 'aug' => 'August', + 'sep' => 'September', 'oct' => 'October', + 'nov' => 'November', 'dec' => 'December'); + + +sub dont_print ($) { + my($d) = @_; + $dont_print{$d->{'_type'}} || ($d->{'www_show'} eq 'no'); +} + +sub htmlize ($) { + my($x) = @_; + $x =~ s/&([^a-z0-9])/&$1/g; + $x =~ s/\\i([^a-zA-Z@])/i$1/g; + $x =~ s/\\'(.)/&$1acute;/g; + $x =~ s/\\`(.)/&$1grave;/g; + $x =~ s/\\~(.)/&$1tilde;/g; + $x =~ s/\\\^(.)/&$1circ;/g; + $x =~ s/\\"(.)/&$1uml;/g; + $x =~ s/\\[a-zA-Z@]+//g; + $x =~ s/\\.//g; + $x =~ tr/{}//d; + $x =~ s/(\d)--(\d)/$1-$2/g; + $x; +} + +sub htmlize_author ($) { + my($aaa) = @_; + my($x) = join(' ', @{$aaa->[0]}, @{$aaa->[1]}, @{$aaa->[2]}); + if (@{$aaa->[3]}) { + $x .= ', ' . join(' ', @{$aaa->[3]}); + } + htmlize($x); +} + +sub push_availability ($$\@$) { + my($d, $key, $availability, $name) = @_; + if ($d->{$key}) { + my($url) = $d->{$key}; + $url = $server_url . $url if $url =~ /^\//; + push @$availability, '<a href="' . $url . '">' . $name . '</a>'; + } +} + +sub htmlize_biblio_info ($) { + my($d) = @_; + my($_type) = $d->{'_type'}; + my($x, $i); + + if ($_type eq 'inproceedings') { + $x = "In the " . $d->{'booktitle'}; + if ($d->{'bookurl'}) { + if ($x =~ /^(in the proceedings of( the)? )(.*)/i + || $x =~ /^(in the workshop record of( the)? )(.*)/i) { + $x = $1 . "<a href=\"$d->{'bookurl'}\">" . $3 . "</a>"; + } else { + $x = "In the <a href=\"$d->{'bookurl'}\">$d->{'booktitle'}</a>"; + } + } + $x .= ", " . $d->{'edition'} if $d->{'edition'}; + $x .= ", " . $d->{'address'} if $d->{'address'}; + $x .= ", " . $d->{'month'} . " " . $d->{'year'} + if $d->{'month'} || $d->{'year'}; + $x .= ($d->{'pages'} =~ /^\d+$/ ? ", page " : ", pages ") + . $d->{'pages'} if $d->{'pages'}; + + } elsif ($_type eq 'article') { + $x = "In " . $d->{'journal'}; + if ($d->{'journalurl'}) { + $x =~ s/^(in )(.*)$/$1<a href="$d->{'journalurl'}">$2<\/a>/; + } + $x .= " <b>" . $d->{'volume'} . "</b>" if $d->{'volume'}; + $x .= "(" . $d->{'number'} . ")" if $d->{'number'}; + $x .= ", " . $d->{'month'} . " " . $d->{'year'} + if $d->{'month'} || $d->{'year'}; + $x .= ($d->{'pages'} =~ /^\d+$/ ? ", page " : ", pages ") + . $d->{'pages'} if $d->{'pages'}; + + } elsif ($_type eq 'techreport') { + $x = $d->{'institution'}; + $x .= " " . ($d->{'type'} ? $d->{'type'} : "technical report"); + $x .= " " . $d->{'number'}; + $x .= ", " . $d->{'month'} . " " . $d->{'year'} + if $d->{'month'} || $d->{'year'}; + + } elsif ($_type eq 'mastersthesis' || $_type eq 'phdthesis') { + $x = ($_type eq 'mastersthesis' ? "Master's thesis" : "Ph.D. thesis"); + $x = $d->{'type'} if $d->{'type'}; + $x .= ", " . $d->{'school'} if $d->{'school'}; + $x .= ", " . $d->{'month'} . " " . $d->{'year'} + if $d->{'month'} || $d->{'year'}; + + } elsif ($_type eq 'misc') { + $x = $d->{'howpublished'}; + $x .= ", " . $d->{'month'} . " " . $d->{'year'} + if $d->{'month'} || $d->{'year'}; + $x .= ($d->{'pages'} =~ /^\d+$/ ? ", page " : ", pages ") + . $d->{'pages'} if $d->{'pages'}; + + } else { + $x = "<odd type $_type>"; + } + + $x = '<span class="biblio">' . $x . ".</span> "; + $x .= "<span class=\"availability\">(<a href=\"$cgi_dir/bibtex-entry.cgi?key="; + $x .= $d->{'_key'} . "\">BibTeX entry</a>)</span>"; + htmlize($x); +} + +sub htmlize_entry ($) { + my($d) = @_; + my(@availability, @a, $a, $i, $j, $x); + + # print title + $x .= '<li><p class="entry"><span class="title">' . htmlize($d->{'title'}) . ".</span>"; + + # print availability + @availability = (); + push_availability $d, 'www_abstract_url', @availability, 'abstract'; + push_availability $d, 'www_html_url', @availability, 'HTML'; + push_availability $d, 'www_pdf_url', @availability, 'PDF'; + push_availability $d, 'www_ps_url', @availability, 'PS'; + push_availability $d, 'www_ps_gz_url', @availability, 'gzipped PS'; + if (@availability) { + $x .= ' <span class="availability">('; + $x .= join(', ', @availability) . ")</span>"; + } + $x .= "<br>\n"; + + # print authors + $x .= '<span class="author">by '; + @a = BibTeX::parse_author($d->{'author'}); + foreach $i (0..$#a) { + $x .= ", " if ($i > 0 && $i < $#a); + $x .= " and " if ($i == $#a && $#a == 1); + $x .= ", and " if ($i == $#a && $#a > 1); + $a = htmlize_author($a[$i]); + for ($j = 0; $j < @author_urls; $j += 2) { + if ($a =~ /$author_urls[$j]/) { + $x .= '<a href="' . $author_urls[$j+1] . '">' . $a . '</a>'; + undef $a; + last; + } + } + $x .= $a if defined $a; + } + $x .= "." if $a !~ /\.$/; + $x .= "</span><br>\n"; + + $x .= htmlize_biblio_info($d); + $x .= "</p></li>\n\n"; + + $x; +} + + +sub url_untranslate ($) { + my($x) = $_[0]; + $x =~ s/ /+/g; + $x =~ s/([%<>])/sprintf("%02x", chr($1))/eg; + $x; +} + +1; diff --git a/perl/PDOSCGI.pm b/perl/PDOSCGI.pm new file mode 100644 index 0000000..94eb07c --- /dev/null +++ b/perl/PDOSCGI.pm @@ -0,0 +1,68 @@ +package main; + +##### +# SERVER DATA + +$server_url = "http://www.pdos.lcs.mit.edu"; +$img_dir = "/img"; +$cgi_dir = "/cgi-bin"; +$main_dir = ""; # == top dir +$css_dir = ""; # == top dir +$pdos_bib_dir = "/home/am0/httpd/htdocs/pdosbib"; + + +##### +# ERROR_EXIT +# &error_exit($title, $message...) prints an HTML document summarizing the +# error and exits. + +sub error_exit ($@) { + my($title) = $_[0]; + my($message) = join('', @_[1..$#_]); + print <<"EOD;"; +Content-type: text/html + +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head><title>PDOS CGI Error</title></head> +<body> + +<h1>$title</h1> + +<p>$message + +<p><a href="$server_url">PDOS home page</a> + +</body> +</html> +EOD; + exit 0; +} + +##### +# HTTP_DATE +# Given a time value (seconds since 00:00:00 UTC, Jan 1, 1970), formats an +# HTTP date and returns it. Useful for Expires:. + +@PDOSCGI::weekdays = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); +@PDOSCGI::months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); + +sub http_date ($) { + my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = + gmtime($_[0]); + sprintf("%s, %02d %s %d %02d:%02d:%02d GMT", + $PDOSCGI::weekdays[$wday], $mday, $PDOSCGI::months[$mon], + $year, $hour, $min, $sec); +} + +##### +# URL_TRANSLATE + +sub url_translate ($) { + my($x) = $_[0]; + $x =~ s/\+/ /g; + $x =~ s/%(\w\w)/pack('C', hex($1))/eg; + $x; +} + +1; diff --git a/perl/bibtex-entry.cgi b/perl/bibtex-entry.cgi new file mode 100644 index 0000000..8c166fa --- /dev/null +++ b/perl/bibtex-entry.cgi @@ -0,0 +1,206 @@ +#!/usr/bin/perl +# CGI script: PDOS publication BibTeX entry +# Eddie Kohler, June 10, 1999 + +use lib '/home/am3/httpd/htdocs/pdosbib'; +#use lib '/u/eddietwo/www/pdos/pdosbib'; +use BibTeX; +use PDOSCGI; + +%initial_strings = + ('jan' => 'January', 'feb' => 'February', + 'mar' => 'March', 'apr' => 'April', + 'may' => 'May', 'jun' => 'June', + 'jul' => 'July', 'aug' => 'August', + 'sep' => 'September', 'oct' => 'October', + 'nov' => 'November', 'dec' => 'December'); + +open(BIB, "$pdos_bib_dir/pdos.bib") + || error_exit("Can't open <tt>pdos.bib</tt>!"); +$e = BibTeX::parse(*BIB, %initial_strings); +close BIB; + +##### +# PROCESS_QUERY + +sub process_query ($) { + my($q) = $_[0]; + while ($q =~ /^\&?([^\&]+)(.*)/) { + $_ = url_translate($1); + $q = $2; + if (/^key=(.*)$/) { + $bibtex_key = $1; + } else { + error_exit('Bad Query', <<"EOD;"); +I don't understand part of your query -- specifically, the ``<tt>$_</tt>'' +part. +EOD; + } + } +} + + +## +# INITIALIZATION & READING + +$index_url = "http://$ENV{'SERVER_NAME'}$ENV{'REQUEST_URI'}"; +$index_url =~ s#/[^/]+$#/#; + +&process_query($ENV{'QUERY_STRING'}) if exists $ENV{'QUERY_STRING'}; + +print <<"EOD;"; +Content-type: text/html + +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<meta http-equiv="Content-Style-Type" content="text/css"> + +<!-- Generated by `bibtex-entry.cgi' + -- (c) Eddie Kohler 1999-2000 --> + +<title>PDOS Publications Search Results</title> + +<link rel="stylesheet" type="text/css" href="$css_dir/main.css"> +<link rel="stylesheet" type="text/css" href="$css_dir/pubs.css"> + +</head> +<body bgcolor="#ffffff" text="#000000" link="#bb0000" vlink="#990099" +alink="#ff9900" marginheight="0" marginwidth="0"> + +<table cellspacing="0" cellpadding="0" border="0" align="center"> + +<tr valign="top"> +<td rowspan="8" width="134"><div align="right"><a href="/"><img +src="/img/pdostab.gif" width="134" height="61" border="0" +alt="PDOS Home"></a></div></td> +<td rowspan="8" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td rowspan="4" width="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="8" height="1" alt=""></td> +<td rowspan="6" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td bgcolor="#ffffcc"><p> <a href="http://web.mit.edu/">MIT</a> > <a href="http://www.lcs.mit.edu/">LCS</a> > <a href="/">PDOS Home</a> > </p></td> +<td bgcolor="#ffffcc"><p><a href="$main_dir/pubs.html">Publications</a> > </p></td> +<td bgcolor="#ffffcc"><p><b>BibTeX entry</b></p></td> +</tr> + +<tr valign="top"> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p class="crumbbreadth"> +<a href="$main_dir/projects.html">Projects</a><br> +<a href="$main_dir/people.html">People</a><br> +<a href="$main_dir/software.html">Software</a></p></td> +<td bgcolor="#ffffcc"><p class="crumbbreadth"> +<a href="$main_dir/pubs.html">By subject</a><br> +<a href="/cgi-bin/pubs-date.cgi">By date</a><br> +</p></td> +</tr> + +<tr valign="top"> +<td colspan="2" height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="1" height="8" alt=""></td> +<td height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="100" height="8" alt=""></td> +</tr> + +<tr valign="top"> +<td colspan="4" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td rowspan="2" colspan="3" bgcolor="#ccffff"><form action="/cgi-bin/pubs-date.cgi" +method="get"><strong> Publication +search:</strong><small> <input type=entry +name=match size=15> <input type=submit +value="Go"><br></small></form></td> + +<td width="8" bgcolor="#ccffff"><img src="/img/emptydot.gif" +width="8" height="1" alt=""></td> +</tr> + +<tr valign="bottom"> +<td rowspan="2" colspan="2" width="9" height="9" bgcolor="#ccffff" background="/img/nineborder.gif"><img src="/img/whitecorner.gif" width="9" height="9" alt=""></td> +</tr> + +<tr valign="top"> +<td colspan="3" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +</table> + + +<table cellspacing="0" cellpadding="0" border="0" width="100%"> + +<tr valign="top"> +<td width="15%" height="24"><br></td> +</tr> + +<tr valign="top"> +<td></td> + +<td width="70%"> + +EOD; + +$type = ($bibtex_key ? "<tt>`$bibtex_key'</tt>" : "all entries"); +print "<h1>BibTeX entry server: results for $type</h1>\n"; + +sub break_lines ($$) { + my($t, $l) = @_; + my($s, $f, $p, $x) = (0, 0, 0, ""); + while ($p < length $t) { + if (substr($t, $p, 1) =~ /\s/) { + $s = $p; + } elsif ($f + $l <= $p && $s > $f) { + $x .= substr($t, $f, $s - $f) . "\n"; + $s = $f = $s + 1; + } + $p++; + } + $x .= substr($t, $f); + $x; +} + +if ($bibtex_key && $e->{$bibtex_key}) { + $d = BibTeX::expand($e, $bibtex_key); + $k = "\@" . $d->{'_type'} . "{" . $bibtex_key . ",\n"; + foreach $i ('title', 'author', 'journal', 'booktitle', 'school', 'institution', 'organization', 'volume', 'number', 'year', 'month', 'address', 'chapter', 'edition', 'pages', 'editor', 'howpublished', 'key', 'publisher', 'type', 'note') { + if (exists $d->{$i}) { + $k .= break_lines(" " . $i . " = {" . $d->{$i} . "},\n", 80); + } + } + $k .= "}\n"; +} elsif ($bibtex_key) { + print "<p>There is no PDOS paper with key `<tt>$bibtex_key</tt>'.\n"; + undef $k; +} else { + $k = `cat pdos.bib`; +} +if (defined $k) { + $k =~ s/&/&/g; + $k =~ s/</</g; + $k =~ s/>/>/g; + print "<p><pre>$k</pre>\n"; +} + + +print <<"EOD;"; +</td> + +<td width="15%"><br></td> + +</tr> +</table> + +</body> +</html> +EOD; diff --git a/perl/mkpdospubs.pl b/perl/mkpdospubs.pl new file mode 100644 index 0000000..c500b42 --- /dev/null +++ b/perl/mkpdospubs.pl @@ -0,0 +1,235 @@ +v#!/usr/local/bin/perl +# *** +# *** CGI script: static PDOS publication list +# *** Eddie Kohler, June 10, 1999 +# *** +# *** Take a look at PDOSBib.pm +# *** to change things like people's URLs +# *** and how different bibliography entries are generated +# *** +# *** Take a look at PDOSCGI.pm +# *** to change where files are located +# *** + +use lib '/home/am0/httpd/htdocs/pdosbib'; +use BibTeX; +use PDOSBib; +use PDOSCGI; + +sub do_entries () { + my($section, $key, $d); + foreach $section (@sections) { + # print section header + print '<h2><a name="', url_untranslate($section), '">'; + print $section, "</a></h2>\n"; + print "<ul class=\"expand\">\n"; + + # print all papers in that section + foreach $key (@{$e->{'_'}}) { + $d = BibTeX::expand($e, $key); + next if dont_print($d) || $d->{'www_section'} ne $section; + print htmlize_entry $d; + } + + print "</ul>\n"; + } +} + + +sub do_sections () { + foreach $section (@sections) { + print '<p class="l2"><a href="#', url_untranslate($section); + print '">', $section, "</a></p>\n"; + } +} + + +# main program +if (@ARGV > 0) { + open(BIB, $ARGV[0]) || die "can't open $ARGV[0]"; +} else { + open(BIB, "<&STDIN"); +} +$e = BibTeX::parse(*BIB, %initial_strings); +close BIB; + +if (@ARGV > 1) { + open(STDOUT, ">$ARGV[1]") || die "can't open $ARGV[1]"; +} + +# make sections +@sections = (); +foreach $key (@{$e->{'_'}}) { + next if dont_print($e->{$key}); + $section = $e->{$key}->{'www_section'}; + $e->{$key}->{'www_section'} = $section = "Miscellaneous" if $section eq ''; + if (!exists $sections{$section}) { + push @sections, $section if $section ne ''; + $sections{$section} = 1; + } +} +push @sections, 'Miscellaneous' + if $sections{''} && !$sections{'Miscellaneous'}; + +## PRINT STUFF! +$argv_string = join(' ', 'mkpdospubs.pl', @ARGV); +print <<"EOD;"; +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<meta http-equiv="Content-Style-Type" content="text/css"> + +<!-- *** I AM MACHINE GENERATED! DO NOT EDIT ME! + -- *** EDIT THE .bib FILE INSTEAD! + -- + -- Generated by `$argv_string' + -- (c) Eddie Kohler 1999-2000 --> + +<title>PDOS Publications</title> + +<link rel="stylesheet" type="text/css" href="main.css"> +<link rel="stylesheet" type="text/css" href="pubs.css"> + +</head> +<body bgcolor="#ffffff" text="#000000" link="#bb0000" vlink="#990099" +alink="#ff9900" marginheight="0" marginwidth="0"> + +<table cellspacing="0" cellpadding="0" border="0" align="center"> + +<tr valign="top"> +<td rowspan="5" width="134"><div align="right"><a href="/"><img +src="/img/pdostab.gif" width="134" height="61" border="0" +alt="PDOS Home"></a></div></td> +<td rowspan="5" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td rowspan="3" width="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="8" height="1" alt=""></td> +<td rowspan="3" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td bgcolor="#ffffcc"><p> <a href="http://web.mit.edu/">MIT</a> > <a href="http://www.lcs.mit.edu/">LCS</a> > <a href="/">PDOS Home</a> > </p></td> +<td bgcolor="#ffffcc"><p><b>Publications</b> > </p></td> +<td bgcolor="#ffffcc"><p><b>By subject</b></p></td> +</tr> + +<tr valign="top"> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p class="crumbbreadth"> +<a href="projects.html">Projects</a><br> +<a href="people.html">People</a><br> +<a href="software.html">Software</a></p></td> +<td bgcolor="#ffffcc"><p class="crumbbreadth"> +<a href="/cgi-bin/pubs-date.cgi">By date</a></p></td> +</tr> + +<tr valign="top"> +<td colspan="2" height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="1" height="8" alt=""></td> +<td colspan="1" height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="100" height="8" alt=""></td> +<td colspan="2" rowspan="2" width="9" height="9" bgcolor="#ffffcc"><img +src="/img/whitecorner.gif" width="9" height="9" alt=""></td> +</tr> + +<tr valign="top"> +<td colspan="3" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +</table> + + +<table cellspacing="0" cellpadding="0" border="0" width="100%"> + +<tr valign="top"> +<td width="10%" height="24"><br></td> +</tr> + +<tr valign="top"> +<td><div align="right"> +<table cellspacing="0" cellpadding="0" border="0" width="161"> + +<tr valign="top"> +<td rowspan="6" width="8"><img src="/img/emptydot.gif" +width="8" height="1" alt=""></td> +<td colspan="4" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td rowspan="5" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> + +<td bgcolor="#ccffff"><p class="l1"><br><form action="/cgi-bin/pubs-date.cgi" +method="get"><strong>Publication search:</strong><br> +<small><input type=entry name=match size=15> <input type=submit +value="Go"><br></small></form></p></td> + +<td width="8" bgcolor="#ccffff"><img src="/img/emptydot.gif" +width="8" height="1" alt=""></td> +<td rowspan="3" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +<td rowspan="3" width="12"><img src="/img/emptydot.gif" +width="12" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td colspan="2" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td bgcolor="#ccffff"><p class="l1"><br><form action="/cgi-bin/pubs-date.cgi" +method="get"><strong>Subjects:</strong><br> +EOD; + +## PRINT SECTIONS +do_sections; + +print <<"EOD;"; +</p></td> + +<td width="8" bgcolor="#ccffff"><img src="/img/emptydot.gif" +width="8" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td height="8" bgcolor="#ccffff"><img src="/img/emptydot.gif" +width="1" height="8" alt=""></td> +<td colspan="2" rowspan="2" width="9" height="9" bgcolor="#ccffff"><img +src="/img/whitecorner.gif" width="9" height="9" alt=""></td> +</tr> + +<tr valign="top"> +<td height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +</table> +</div></td> + +<td width="75%"> + +<h1>Publications by subject</h1> + +EOD; + +## PRINT ENTRIES +do_entries; + +print <<"EOD;"; +</td> + +<td width="15%"><br></td> + +</tr> +</table> + +</body> +</html> +EOD; diff --git a/perl/pubs-date.cgi b/perl/pubs-date.cgi new file mode 100644 index 0000000..aa64932 --- /dev/null +++ b/perl/pubs-date.cgi @@ -0,0 +1,274 @@ +#!/usr/local/bin/perl +# CGI script: PDOS publications by date +# Eddie Kohler, June 10, 1999 + +use lib '/home/am0/httpd/htdocs/pdosbib'; +#use lib '/u/eddietwo/www/pdos/pdosbib'; +use BibTeX; +use PDOSBib; +use PDOSCGI; + +%date_back = + ('January' => 1, 'February' => 2, + 'March' => 3, 'April' => 4, + 'May' => 5, 'June' => 6, + 'July' => 7, 'August' => 8, + 'September' => 9, 'October' => 10, + 'November' => 11, 'December' => 12); + +sub do_entries () { + my($key, $d, @x, @d, @date, @permute, $x, $y, $i, $ever); + my($current_year) = (gmtime())[5] + 1900; + + foreach $key (@{$e->{'_'}}) { + $d = BibTeX::expand($e, $key); + next if dont_print($d); + $x = $y = htmlize_entry $d; + if (defined $match) { + $y =~ s/&([\w])\w+;/$1/g; + $y =~ s/<.*?>//g; + next if !&matcher($y); + } + push @x, $x; + push @d, $d; + if ($d->{'year'} =~ /to appear/i) { + push @date, 12*$current_year + 12; + $d->{'_show_year'} = $current_year; + } else { + push @date, 12*$d->{'year'} + $date_back{$d->{'month'}}; + $d->{'_show_year'} = ($d->{'year'} ? $d->{'year'} : 'unknown'); + } + push @permute, $#x; + } + + # permute the list, sort by date + @permute = reverse sort { $date[$a] <=> $date[$b] } @permute; + undef $y; + + # print entries + foreach $i (@permute) { + $d = $d[$i]; + if ($d->{'_show_year'} ne $y || !$ever) { + print "</ul>\n" if $ever; + $y = $d->{'_show_year'}; + $ever = 1; + print "<h2>$y</h2>\n<ul class=\"expand\">\n"; + } + print $x[$i]; + } + + print "</ul>\n" if $ever; + print "No matches.\n" if !$ever; +} + +##### +# PROCESS_QUERY + +sub process_query ($) { + my($q) = $_[0]; + while ($q =~ /^\&?([^\&]+)(.*)/) { + $_ = url_translate($1); + $q = $2; + if (/^match=(.*)$/) { + $match = $1; + $match =~ s/\///g; + # my name gets mangled a lot... decouto + $match =~ s/decouto/De Couto/i; + } else { + error_exit('Bad Query', <<"EOD;"); +I don't understand part of your query -- specifically, the ``<tt>$_</tt>'' +part. +EOD; + } + } +} + +## +# INITIALIZATION & READING + +$index_url = "http://$ENV{'SERVER_NAME'}$ENV{'REQUEST_URI'}"; +$index_url =~ s#/[^/]+$#/#; + +&process_query($ENV{'QUERY_STRING'}) if exists $ENV{'QUERY_STRING'}; + +## PRINT DATA + +$| = 1; +print <<"EOD;"; +Content-type: text/html + +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html><head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> +<meta http-equiv="Content-Style-Type" content="text/css"> + +<!-- Generated by `pubs-date.cgi' + -- (c) Eddie Kohler 1999-2000 --> + +<title>PDOS Publications Search Results</title> + +<link rel="stylesheet" type="text/css" href="$css_dir/main.css"> +<link rel="stylesheet" type="text/css" href="$css_dir/pubs.css"> + +</head> +<body bgcolor="#ffffff" text="#000000" link="#bb0000" vlink="#990099" +alink="#ff9900" marginheight="0" marginwidth="0"> + +<table cellspacing="0" cellpadding="0" border="0" align="center"> + +<tr valign="top"> +<td rowspan="8" width="134"><div align="right"><a href="/"><img +src="/img/pdostab.gif" width="134" height="61" border="0" +alt="PDOS Home"></a></div></td> +<td rowspan="8" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p><br></p></td> +<td rowspan="4" width="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="8" height="1" alt=""></td> +<td rowspan="6" width="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td bgcolor="#ffffcc"><p> <a href="http://web.mit.edu/">MIT</a> > <a href="http://www.lcs.mit.edu/">LCS</a> > <a href="/">PDOS Home</a> > </p></td> +<td bgcolor="#ffffcc"><p><a href="$main_dir/pubs.html">Publications</a> > </p></td> +EOD; + +if (defined($match)) { + print '<td bgcolor="#ffffcc"><p><b>Search results</b></p></td>', "\n"; +} else { + print '<td bgcolor="#ffffcc"><p><b>By date</b></p></td>', "\n"; +} + +print <<"EOD;"; +</tr> + +<tr valign="top"> +<td bgcolor="#ffffcc"><p><br></p></td> +<td bgcolor="#ffffcc"><p class="crumbbreadth"> +<a href="$main_dir/projects.html">Projects</a><br> +<a href="$main_dir/people.html">People</a><br> +<a href="$main_dir/software.html">Software</a></p></td> +<td bgcolor="#ffffcc"><p class="crumbbreadth"> +EOD; + +if (defined($match)) { + print '<a href="', $main_dir, '/pubs.html">All by subject</a><br>', "\n"; + print '<a href="/cgi-bin/pubs-date.cgi">All by date</a><br>', "\n"; +} else { + print '<a href="', $main_dir, '/pubs.html">By subject</a><br>', "\n"; +} + +print <<"EOD;"; +</p></td> +</tr> + +<tr valign="top"> +<td colspan="2" height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="1" height="8" alt=""></td> +<td height="8" bgcolor="#ffffcc"><img src="/img/emptydot.gif" +width="100" height="8" alt=""></td> +</tr> + +<tr valign="top"> +<td colspan="4" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +<tr valign="top"> +<td rowspan="2" colspan="3" bgcolor="#ccffff"><form action="/cgi-bin/pubs-date.cgi" +method="get"><strong> Publication +search:</strong><small> <input type="entry" +name="match" size="15" value="$match"> <input type="submit" +value="Go"><br></small></form></td> + +<td width="8" bgcolor="#ccffff"><img src="/img/emptydot.gif" +width="8" height="1" alt=""></td> +</tr> + +<tr valign="bottom"> +<td rowspan="2" colspan="2" width="9" height="9" bgcolor="#ccffff" background="/img/nineborder.gif"><img src="/img/whitecorner.gif" width="9" height="9" alt=""></td> +</tr> + +<tr valign="top"> +<td colspan="3" height="1" bgcolor="#92a6a4"><img src="/img/emptydot.gif" +width="1" height="1" alt=""></td> +</tr> + +</table> + + +<table cellspacing="0" cellpadding="0" border="0" width="100%"> + +<tr valign="top"> +<td width="15%" height="24"><br></td> +</tr> + +<tr valign="top"> +<td></td> + +<td width="70%"> + +EOD; + +if (defined($match)) { + print "<h1>Publications matching `<tt>$match</tt>'</h1>\n"; +} else { + print "<h1>Publications by date</h1>\n"; +} + +$| = 0; + +open(BIB, "$pdos_bib_dir/pdos.bib") + || error_exit("Can't open <tt>pdos.bib</tt>!"); +$e = BibTeX::parse(*BIB, %initial_strings); +close BIB; + +# make sections +foreach $key (@{$e->{'_'}}) { + next if dont_print($e->{$key}); + $e->{$key}->{'www_section'} = "Miscellaneous" + if $e->{$key}->{'www_section'} eq ''; +} + +if (defined($match)) { + $sub = 'sub main::matcher ($) { 1'; + if ($match =~ /[\.\^\$\[\](){}*|]/) { + $sub .= " && \$_[0] =~ /$match/oi"; + } elsif ($match eq ':abstract:') { + $sub .= " && \$_[0] =~ /\\(abstract\\b/oi"; + } else { + $_ = $match; + s/\+//; + while ($_ ne '') { + s/^\s+//; + if (/^\"([^\"]+)(.*)/) { + $sub .= " && \$_[0] =~ /$1/oi"; + $_ = $2; + $_ =~ s/^\"//; + } elsif (/^\"\"(.*)/) { + $_ = $2; + } elsif (/^(\S+)(.*)/) { + $sub .= " && \$_[0] =~ /$1/oi"; + $_ = $2; + } + } + } + eval "$sub; }"; +} + +do_entries; + +print <<"EOD;"; +</td> + +<td width="15%"><br></td> + +</tr> +</table> + +</body> +</html> +EOD; diff --git a/testbib/pdos.bib b/testbib/pdos.bib new file mode 100644 index 0000000..65b24b7 --- /dev/null +++ b/testbib/pdos.bib @@ -0,0 +1,1742 @@ +%% *** +%% *** ASK YOURSELF: +%% *** +%% *** Did I put it in the right section? +%% *** Did I include a `www_section' tag? +%% *** Did I include the page numbers? +%% *** Did I include the location of the conference (in the `address' tag)? +%% *** +%% *** When you are done editing this file, run this command: +%% *** ./mkpdospubs.pl pdos.bib ../pubs.html +%% *** + +@string{MIT = "Massachusetts Institute of Technology"} +@string{MIT-LCS = "{MIT} Laboratory for Computer Science"} +@string{ACMabbr = "{ACM}"} +@string{SOSP = ACMabbr # " {S}ymposium on {O}perating {S}ystems {P}rinciples"} +@string{IEEEabbr = "{IEEE}"} +@string{IEEECompSoc = IEEEabbr # " {C}omputer {S}ociety"} +@string{OSDI = "{USENIX} {S}ymposium on {O}perating {S}ystems {D}esign and {I}mplementation"} + +@string{PDOSWWW = "http://www.pdos.lcs.mit.edu"} + +%% P2P PAPERS + +@string{p2p = "Peer-to-peer Computing"} + +@inproceedings{ivy:osdi02, + title = "Ivy: A Read/Write Peer-to-peer File System", + author = "Athicha Muthitacharoen and Robert Morris and Thomer Gil and Benjie Chen", + crossref = osdi5, + www_section = p2p, + www_abstract_url = PDOSWWW # "/ivy/osdi02.html", + www_ps_url = PDOSWWW # "/ivy/osdi02.ps", + www_ps_gz_url = PDOSWWW # "/ivy/osdi02.ps.gz", + www_pdf_url = PDOSWWW # "/ivy/osdi02.pdf" +} + +@inproceedings{trie:iptps02, + title = "Efficient Peer-To-Peer Lookup Based on a Distributed Trie", + author = "Michael J. Freedman and Radek Vingralek", + crossref = "iptps02", + www_section = p2p, + www_abstract_url = PDOSWWW # "/papers/trie:iptps02/index.html", + www_ps_url = PDOSWWW # "/papers/trie:iptps02/trie:iptps02.ps", + www_ps_gz_url = PDOSWWW # "/papers/trie:iptps02/trie:iptps02.ps.gz", + www_pdf_url = PDOSWWW # "/papers/trie:iptps02/trie:iptps02.pdf" +} + +@inproceedings{chord:dns02, + title = "Serving DNS using Chord", + author = "Russ Cox and Athicha Muthitacharoen and Robert Morris", + crossref = "iptps02", + www_section = p2p, + www_abstract_url = PDOSWWW # "/papers/chord:dns02/index.html", + www_ps_url = PDOSWWW # "/papers/chord:dns02/chord:dns02.ps", + www_ps_gz_url = PDOSWWW # "/papers/chord:dns02/chord:dns02.ps.gz", + www_pdf_url = PDOSWWW # "/papers/chord:dns02/chord:dns02.pdf" +} + +@inproceedings{chord:security02, + title = "Security Considerations for Peer-to-Peer Distributed Hash Tables", + author = "Emil Sit and Robert Morris", + crossref = "iptps02", + www_section = p2p, + www_abstract_url = PDOSWWW # "/papers/chord:security02/index.html", + www_ps_url = PDOSWWW # "/papers/chord:security02/chord:security02.ps", + www_ps_gz_url = PDOSWWW # "/papers/chord:security02/chord:security02.ps.gz", + www_pdf_url = PDOSWWW # "/papers/chord:security02/chord:security02.pdf" +} + +@inproceedings{cfs:sosp01, + title = "Wide-area cooperative storage with {CFS}", + author = "Frank Dabek and M. Frans Kaashoek and David Karger and Robert Morris and Ion Stoica", + crossref = "sosp18", + pages = "", + www_section = p2p, + www_abstract_url = PDOSWWW # "/papers/cfs:sosp01/", + www_ps_url = PDOSWWW # "/papers/cfs:sosp01/cfs_sosp.ps", + www_ps_gz_url = PDOSWWW # "/papers/cfs:sosp01/cfs_sosp.ps.gz", + www_pdf_url = PDOSWWW # "/papers/cfs:sosp01/cfs_sosp.pdf", +} + +@inproceedings{chord:sigcomm01, + title = "Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications", + author = "Ion Stoica and Robert Morris and David Karger and M. Frans Kaashoek and Hari Balakrishnan", + crossref = "sigcomm01", + pages = "", + www_section = p2p, + www_abstract_url = PDOSWWW # "/papers/chord:sigcomm01/", + www_ps_url = PDOSWWW # "/papers/chord:sigcomm01/chord_sigcomm.ps", + www_ps_gz_url = PDOSWWW # "/papers/chord:sigcomm01/chord_sigcomm.ps.gz", + www_pdf_url = PDOSWWW # "/papers/chord:sigcomm01/chord_sigcomm.pdf", +} + +@inproceedings{chord:hotos, + title = "Building Peer-to-Peer Systems With Chord, a Distributed Lookup Service", + author = "Frank Dabek and Emma Brunskill and M. Frans Kaashoek and David Karger and Robert Morris and Ion Stoica and Hari Balakrishnan", + crossref = "hotos8", + pages = "", + www_section = p2p, + www_abstract_url = PDOSWWW # "/papers/chord:hotos01/", + www_ps_url = PDOSWWW # "/papers/chord:hotos01/hotos8.ps", + www_ps_gz_url = PDOSWWW # "/papers/chord:hotos01/hotos8.ps.gz", + www_pdf_url = PDOSWWW # "/papers/chord:hotos01/hotos8.pdf", +} + + +%% NETWORKING PAPERS + +@string{networking = "Networking and Communication"} + +@inproceedings{click:asplos02, + title = "Programming Language Optimizations for Modular Router Configurations", + author = "Eddie Kohler and Robert Morris and Benjie Chen", + booktitle = "Proceedings of the 10th Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS)", + location = "San Jose, CA", + month = oct, + year = 2002, + www_section = networking, + www_pdf_url = PDOSWWW # "/papers/click:asplos02.pdf" +} + +@inproceedings{grid:hotnets02, + title = "Performance of Multihop Wireless Networks: Shortest Path is Not Enough", + author = "Douglas S. J. {De Couto} and Daniel Aguayo and Benjamin A. Chambers and Robert Morris", + crossref = "hotnets1", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/grid:hotnets02/", + www_ps_url = PDOSWWW # "/papers/grid:hotnets02/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/grid:hotnets02/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/grid:hotnets02/paper.pdf" +} + +@techreport{grid:losstr01, + title = "Effects of Loss Rate on Ad Hoc Wireless Routing", + author = "Douglas S. J. {De Couto} and Daniel Aguayo and Benjamin A. Chambers and Robert Morris", + institution = MIT-LCS, + year = 2002, month = mar, + number = "MIT-LCS-TR-836", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/grid:losstr02/", + www_ps_url = PDOSWWW # "/papers/grid:losstr02/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/grid:losstr02/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/grid:losstr02/paper.pdf" +} + + +@article{span:wireless01, + title = "Span: An Energy-Efficient Coordination Algorithm for Topology Maintenance in Ad Hoc Wireless Networks", + author = "Benjie Chen and Kyle Jamieson and Hari Balakrishnan and Robert Morris", + crossref = "journal:winet", + volume = 8, + number = "5", + year = 2002, + month = sep, + pages = "", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/span:wireless01/", + www_ps_url = PDOSWWW # "/papers/span:wireless01/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/span:wireless01/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/span:wireless01/paper.pdf" +} + +@inproceedings{dnscache:sigcommimw01, + title = "DNS Performance and the Effectiveness of Caching", + author = "Jaeyeon Jung, Emil Sit, Hari Balakrishnan and Robert Morris", + crossref = "sigcommimw01", + www_section = networking, + www_abstract_url = "http://nms.lcs.mit.edu/papers/dns-imw2001.html", + www_ps_url = "http://nms.lcs.mit.edu/papers/dns-imw2001.ps", + www_ps_gz_url = "http://nms.lcs.mit.edu/papers/dns-imw2001.ps.gz", + www_pdf_url = "http://nms.lcs.mit.edu/papers/dns-imw2001.pdf" +} + +@inproceedings{ron:sosp01, + title = "Resilient Overlay Networks", + author = "David Andersen and Hari Balakrishnan and M. Frans Kaashoek and Robert Morris", + crossref = "sosp18", + pages = "", + www_section = networking, + www_abstract_url = "http://nms.lcs.mit.edu/papers/ron-sosp2001.html", + www_ps_url = "http://nms.lcs.mit.edu/papers/ron-sosp2001.ps", + www_ps_gz_url = "http://nms.lcs.mit.edu/papers/ron-sosp2001.ps.gz", + www_pdf_url = "http://nms.lcs.mit.edu/papers/ron-sosp2001.pdf", +} + +@techreport{grid:proxytr01, + title = "Location Proxies and Intermediate Node Forwarding for Practical Geographic Forwarding", + author = "Douglas S. J. {De Couto} and Robert Morris", + institution = MIT-LCS, + year = 2001, month = jun, + number = "MIT-LCS-TR-824", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/grid:proxytr01/", + www_ps_url = PDOSWWW # "/papers/grid:proxytr01/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/grid:proxytr01/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/grid:proxytr01/paper.pdf", +} + +@inproceedings{span:mobicom01, + title = "Span: An Energy-Efficient Coordination Algorithm for Topology Maintenance in Ad Hoc Wireless Networks", + author = "Benjie Chen and Kyle Jamieson and Hari Balakrishnan and Robert Morris", + crossref = "mobicom01", + pages = "85--96", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/span:mobicom01/", + www_ps_url = PDOSWWW # "/papers/span:mobicom01/span.ps", + www_ps_gz_url = PDOSWWW # "/papers/span:mobicom01/span.ps.gz", + www_pdf_url = PDOSWWW # "/papers/span:mobicom01/span.pdf" +} + +@inproceedings{grid:mobicom01, + title = "Capacity of Ad Hoc Wireless Networks", + author = "Jinyang Li and Charles Blake and Douglas S. J. {De Couto} and Hu Imm Lee and Robert Morris", + crossref = "mobicom01", + pages = "61--69", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/grid:mobicom01/", + www_ps_url = PDOSWWW # "/papers/grid:mobicom01/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/grid:mobicom01/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/grid:mobicom01/paper.pdf" +} + +@inproceedings{click:usenix01, + title = "Flexible Control of Parallelism in a Multiprocessor PC Router", + author = "Benjie Chen and Robert Morris", + crossref = "usenix01", + pages = "333--346", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/click:usenix01/", + www_ps_url = PDOSWWW # "/papers/click:usenix01/usenix01.ps", + www_ps_gz_url = PDOSWWW # "/papers/click:usenix01/usenix01.ps.gz", + www_pdf_url = PDOSWWW # "/papers/click:usenix01/usenix01.pdf", +} + +@inproceedings{ron:hotos8, + title = "Resilient Overlay Networks", + author = "David Andersen and Hari Balakrishnan and M. Frans Kaashoek and Robert Morris", + crossref = "hotos8", + www_section = networking, + www_abstract_url = "http://nms.lcs.mit.edu/papers/ron-hotos2001.html", + www_ps_url = "http://nms.lcs.mit.edu/papers/ron-hotos2001.ps", + www_ps_gz_url = "http://nms.lcs.mit.edu/papers/ron-hotos2001.ps.gz", + www_pdf_url = "http://nms.lcs.mit.edu/papers/ron-hotos2001.pdf", +} + +@techreport{click:rewritertr, + title = "Modular components for network address translation", + author = "Eddie Kohler and Robert Morris and Massimiliano Poletto", + institution = "MIT LCS Click Project", + year = 2000, month = dec, + note = "http://www.pdos.lcs.mit.edu/papers/click-rewriter/", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/click-rewriter/", + www_ps_url = PDOSWWW # "/papers/click-rewriter/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/click-rewriter/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/click-rewriter/paper.pdf", +} + +@inproceedings{grid:sigops-euro9, + title = "{C}ar{N}et: A Scalable Ad Hoc Wireless Network System", + author = "Robert Morris and John Jannotti and Frans Kaashoek and Jinyang Li and Douglas S. J. {De Couto}", + crossref = "sigops-euro9", + pages = "", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/grid:sigops-euro9/", + www_ps_gz_url = PDOSWWW # "/papers/grid:sigops-euro9/paper.ps.gz", + www_ps_url = PDOSWWW # "/papers/grid:sigops-euro9/paper.ps", + www_pdf_url = PDOSWWW # "/papers/grid:sigops-euro9/paper.pdf", + note = "The published version incorrectly lists Douglas De Couto's name" +} + +@inproceedings{grid:mobicom00, + title = "A Scalable Location Service for Geographic Ad Hoc Routing", + author = "Jinyang Li and John Jannotti and Douglas S. J. {De Couto} and David R. Karger and Robert Morris", + crossref = "mobicom00", + pages = "120--130", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/grid:mobicom00/", + www_ps_url = PDOSWWW # "/papers/grid:mobicom00/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/grid:mobicom00/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/grid:mobicom00/paper.pdf" +} + +@techreport{click:lcstr00, + title = "Programming language techniques for modular router configurations", + author = "Eddie Kohler and Benjie Chen and M. Frans Kaashoek and Robert Morris and Massimiliano Poletto", + institution = MIT-LCS, + year = 2000, month = aug, + number = "MIT-LCS-TR-812", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/click:lcstr00/", + www_ps_url = PDOSWWW # "/papers/click:lcstr00/tr.ps", + www_ps_gz_url = PDOSWWW # "/papers/click:lcstr00/tr.ps.gz", + www_pdf_url = PDOSWWW # "/papers/click:lcstr00/tr.pdf", +} + +@article{click:tocs00, + title = "The Click modular router", + author = "Eddie Kohler and Robert Morris and Benjie Chen and John Jannotti and M. Frans Kaashoek", + crossref = "journal:tocs", + volume = 18, number = 3, + year = 2000, month = aug, + pages = "263--297", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/click:tocs00/", + www_ps_url = PDOSWWW # "/papers/click:tocs00/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/click:tocs00/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/click:tocs00/paper.pdf" +} + +@inproceedings{click:sosp99, + title = "The {C}lick modular router", + author = "Robert Morris and Eddie Kohler and John Jannotti and M. Frans Kaashoek", + crossref = "sosp17", + pages = "217--231", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/click:sosp99/", + www_ps_url = PDOSWWW # "/papers/click:sosp99/paper.ps", + www_ps_gz_url = PDOSWWW # "/papers/click:sosp99/paper.ps.gz", + www_pdf_url = PDOSWWW # "/papers/click:sosp99/paper.pdf" +} + +@inproceedings{prolac:sigcomm99, + title = "A readable {TCP} in the {Prolac} protocol language", + author = "Eddie Kohler and M. Frans Kaashoek and David R. Montgomery", + crossref = "sigcomm99", + pages = "3--13", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/prolac:sigcomm99/", + www_ps_url = PDOSWWW # "/papers/prolac:sigcomm99/paper.ps", + www_pdf_url = PDOSWWW # "/papers/prolac:sigcomm99/paper.pdf" +} + +@inproceedings{ash:sigcomm96, + title = "{ASHs}: application-specific handlers for high-performance messaging", + author = "Deborah A. Wallach and Dawson R. Engler and M. Frans Kaashoek", + crossref = "sigcomm96", + pages = "40--52", + www_section = networking, + www_ps_url = PDOSWWW # "/papers/ash-sigcomm96.ps" +} + +@inproceedings{dpf:sigcomm96, + title = "{DPF}: fast, flexible message demultiplexing using dynamic code generation", + author = "Dawson R. Engler and M. Frans Kaashoek", + crossref = "sigcomm96", + pages = "53--59", + www_section = networking, + www_ps_url = PDOSWWW # "/papers/dpf.ps" +} + +@inproceedings{oam:ppopp95, + title = "Optimistic active messages: a mechanism for scheduling communication with computation", + author = "Deborah A. Wallach and Wilson C. Hsieh and Kirk Johnson and M. Frans Kaashoek and William E. Weihl", + crossref = "ppopp95", + pages = "217--226", + www_section = networking, + www_ps_url = PDOSWWW # "/papers/oam.ps" +} + +@techreport{user-level-comm:tr, + title = "Efficient implementation of high-level languages on user-level communication architectures", + author = "Wilson C. Hsieh and Kirk L. Johnson and M. Frans Kaashoek and Deborah A. Wallach and William E. Weihl", + institution = MIT-LCS, + year = 1994, month = may, + number = "MIT-LCS-TR-616", + www_section = networking, + www_ps_url = PDOSWWW # "/papers/UserLevelCommunication.ps", +} + +@inproceedings{ipc-persistent-relevance:wwos4, + title = "The persistent relevance of IPC performance", + author = "Wilson C. Hsieh and M. Frans Kaashoek and William E. Weihl", + crossref = "wwos4", + pages = "186--190", + www_section = networking, + www_ps_url = PDOSWWW # "/papers/RelevanceOfIPC.ps", +} + +@inproceedings{pan:openarch99, + title = "{PAN}: a high-performance active network node supporting multiple mobile code systems", + author = "Erik L. Nygren and Stephen J. Garland and M. Frans Kaashoek", + crossref = "openarch99", + pages = "78--89", + www_section = networking, + www_abstract_url = PDOSWWW # "/papers/pan-openarch99/", + www_ps_url = PDOSWWW # "/papers/pan-openarch99/pan-openarch99.ps", + www_ps_gz_url = PDOSWWW # "/papers/pan-openarch99/pan-openarch99.ps.gz", + www_pdf_url = PDOSWWW # "/papers/pan-openarch99/pan-openarch99.pdf", +} + +%% DISTRIBUTED COMPUTING + +@string{distribcomp = "Distributed Computing"} + +@inproceedings{lbfs:sosp01, + title = "A Low-bandwidth Network File System", + author = "Athicha Muthitacharoen and Benjie Chen and David Mazi{\`e}res", + crossref = "sosp18", + pages = "174--187", + www_section = distribcomp, + www_abstract_url = PDOSWWW # "/papers/lbfs:sosp01/", + www_ps_url = PDOSWWW # "/papers/lbfs:sosp01/lbfs.ps", + www_ps_gz_url = PDOSWWW # "/papers/lbfs:sosp01/lbfs.ps.gz", + www_pdf_url = PDOSWWW # "/papers/lbfs:sosp01/lbfs.pdf", +} + +@inproceedings{server-os:sigops-euro, + title = "Server operating systems", + author = "M. Frans Kaashoek and Dawson R. Engler and Gregory R. Ganger and Deborah A. Wallach", + crossref = "sigops-euro7", + pages = "141--148", + www_section = distribcomp, + www_html_url = PDOSWWW # "/papers/serverOS.html" +} + +@inproceedings{amoeba-eval:dcs16, + title = "An evaluation of the {Amoeba} group communication system", + author = "M. Frans Kaashoek and Andrew S. Tanenbaum", + crossref = "dcs16", + pages = "436--448", + www_section = distribcomp, + www_ps_url = PDOSWWW # "/papers/group-dcs16.ps" +} + + +%% SECURITY AND PRIVACY + +@string{security = "Security and Privacy"} + +@techreport{sfs:rex, + title = "REX: Secure, modular remote execution through file descriptor passing", + author = "Michael Kaminsky and Eric Peterson and Kevin Fu and David Mazi{\`e}res and M. Frans Kaashoek", + institution = "MIT-LCS", + year = 2003, month = jan, + number = "MIT-LCS-TR-884", + note = "http://www.pdos.lcs.mit.edu/papers/sfs:rex/", + www_section = security, + www_abstract_url = PDOSWWW # "/papers/sfs:rex/", + www_ps_url = PDOSWWW # "/papers/sfs:rex/MIT-LCS-TR-884.ps", + www_ps_gz_url = PDOSWWW # "/papers/sfs:rex/MIT-LCS-TR-884.ps.gz", + www_pdf_url = PDOSWWW # "/papers/sfs:rex/MIT-LCS-TR-884.pdf", +} + +@inproceedings{tarzan:ccs9, + title = "Tarzan: A Peer-to-Peer Anonymizing Network Layer", + author = "Michael J. Freedman and Robert Morris", + crossref = "ccs9", + www_section = security, + www_abstract_url = PDOSWWW # "/papers/tarzan:ccs9/index.html", + www_ps_url = PDOSWWW # "/papers/tarzan:ccs9/tarzan:ccs9.ps", + www_ps_gz_url = PDOSWWW # "/papers/tarzan:ccs9/tarzan:ccs9.ps.gz", + www_pdf_url = PDOSWWW # "/papers/tarzan:ccs9/tarzan:ccs9.pdf" +} + +@inproceedings{tarzan:iptps02, + title = "Introducing Tarzan, a Peer-to-Peer Anonymizing Network Layer", + author = "Michael J. Freedman and Emil Sit and Josh Cates and Robert Morris", + crossref = "iptps02", + www_section = security, + www_abstract_url = PDOSWWW # "/papers/tarzan:iptps02/index.html", + www_ps_url = PDOSWWW # "/papers/tarzan:iptps02/tarzan:iptps02.ps", + www_ps_gz_url = PDOSWWW # "/papers/tarzan:iptps02/tarzan:iptps02.ps.gz", + www_pdf_url = PDOSWWW # "/papers/tarzan:iptps02/tarzan:iptps02.pdf" +} + +@article{sfsro:tocs2002, + title = "{F}ast and secure distributed read-only file system", + author = "Kevin Fu and M. Frans Kaashoek and David Mazi{\`e}res", + crossref = "journal:tocs", + volume = 20, number = 1, + year = 2002, month = feb, + pages = "1--24", + www_section = security, + www_abstract_url = "http://portal.acm.org/citation.cfm?doid=505452.505453" +} + + +@inproceedings{webauth:sec10, + title = "{D}os and Don'ts of Client Authentication on the Web", + author = "Kevin Fu and Emil Sit and Kendra Smith and Nick Feamster", + crossref = "sec10", + www_section = security, + www_abstract_url = PDOSWWW # "/papers/webauth.html", + www_ps_url = PDOSWWW # "/papers/webauth:sec10.ps", + www_pdf_url = PDOSWWW # "/papers/webauth:sec10.pdf", + www_ps_gz_url = PDOSWWW # "/papers/webauth:sec10.ps.gz", + note = "An extended version is available as MIT-LCS-TR-818", +} + +@techreport{webauth:tr, + title = "{D}os and Don'ts of Client Authentication on the Web", + author = "Kevin Fu and Emil Sit and Kendra Smith and Nick Feamster", + institution = MIT-LCS, + year = 2001, month = may, + number = "MIT-LCS-TR-818", + www_section = security, + www_abstract_url = PDOSWWW # "/papers/webauth.html", + www_ps_url = PDOSWWW # "/papers/webauth:tr.ps", + www_pdf_url = PDOSWWW # "/papers/webauth:tr.pdf", + www_ps_gz_url = PDOSWWW # "/papers/webauth:tr.ps.gz", +} + +@inproceedings{sfsro:osdi2000, + title = "{F}ast and secure distributed read-only file system", + author = "Kevin Fu and M. Frans Kaashoek and David Mazi{\`e}res", + crossref = "osdi4", + pages = "181-196", + www_section = security, + www_abstract_url = PDOSWWW # "/papers/sfsro.html", + www_ps_url = PDOSWWW # "/papers/sfsro:osdi2000.ps", + www_pdf_url = PDOSWWW # "/papers/sfsro:osdi2000.pdf", + www_ps_gz_url = PDOSWWW # "/papers/sfsro:osdi2000.ps.gz", +} + +@inproceedings{sfs:sosp99, + title = "{S}eparating key management from file system security", + author = "David Mazi{\`e}res and Michael Kaminsky and M. Frans Kaashoek and Emmett Witchel", + crossref = "sosp17", + pages = "", + www_section = security, + www_ps_gz_url = PDOSWWW # "/papers/sfs:sosp99.ps.gz", + www_pdf_url = PDOSWWW # "/papers/sfs:sosp99.pdf", +} + +@inproceedings{nymserver:ccs5, + title = "The design, implementation and operation of an email pseudonym server", + author = "David Mazi{\`e}res and M. Frans Kaashoek", + crossref = "ccs5", + pages = "27--36", + www_section = security, + www_ps_gz_url = PDOSWWW # "/papers/nymserver:ccs5.ps.gz", + www_pdf_url = PDOSWWW # "/papers/nymserver:ccs5.pdf", +} + +@inproceedings{sfs:sigops-euro8, + title = "Escaping the evils of centralized control with self-certifying pathnames", + author = "David Mazi{\`e}res and M. Frans Kaashoek", + crossref = "sigops-euro8", + pages = "", + www_section = security, + www_ps_gz_url = PDOSWWW # "/papers/sfs:sigops-euro8.ps.gz" +} + +@inproceedings{secure-apps:hotos6, + title = "Secure applications need flexible operating systems", + author = "David Mazi{\`e}res and M. Frans Kaashoek", + pages = "56--61", + crossref = "hotos6", + www_section = security, + www_ps_gz_url = PDOSWWW # "/papers/mazieres:hotos6.ps.gz", +} + + +%% MOBILE COMPUTING + +@string{mobilecomp = "Mobile Computing"} + +@inproceedings{migrate:hotos8, + title = "Reconsidering Internet Mobility", + author = "Alex C. Snoeren and Hari Balakrishnan and M. Frans Kaashoek", + crossref = "hotos8", + www_section = mobilecomp, + www_abstract_url = "http://nms.lcs.mit.edu/papers/migrate-hotOS.html", + www_ps_url = "http://nms.lcs.mit.edu/papers/migrate-hotOS.ps", + www_pdf_url = "http://nms.lcs.mit.edu/papers/migrate-hotOS.pdf", +} + +@misc{rover:rfs-wip, + title = "{RFS}: a mobile-transparent file system for the {Rover} toolkit", + author = "Anthony D. Joseph and George M. Candea and M. Frans Kaashoek", + howpublished = "Works-in-progress poster, the 16th " # SOSP, + crossref = "sosp16", + www_section = mobilecomp, + www_ps_url = PDOSWWW # "/papers/RFS_SOSP_WIP.ps" + www_show = no, +} + +@article{rover:winet, + title = "Building reliable mobile-aware applications using the {Rover} toolkit", + author = "Anthony D. Joseph and M. Frans Kaashoek", + crossref = "journal:winet", + volume = 3, number = 5, + year = 1997, + pages = "405--419", + www_section = mobilecomp, + www_ps_url = PDOSWWW # "/papers/winet.ps" + www_ps_gz_url = PDOSWWW # "/papers/winet.ps.gz" +} + +@article{rover:ieee-toc, + title = "Mobile computing with the {Rover} toolkit", + author = "Anthony D. Joseph and Joshua A. Tauber and M. Frans Kaashoek", + crossref = "journal:ieee-toc", + volume = 46, number = 3, + year = 1997, month = mar, + pages = "337--352", + www_section = mobilecomp, + www_ps_url = PDOSWWW # "/papers/toc.ps" + www_ps_gz_url = PDOSWWW # "/papers/toc.ps.gz" +} + +@inproceedings{rover:mobicom, + title = "Building reliable mobile-aware applications using the {Rover} toolkit", + author = "Anthony D. Joseph and Joshua A. Tauber and M. Frans Kaashoek", + crossref = "mobicom96", + www_section = mobilecomp, + www_ps_url = PDOSWWW # "/papers/mobicom96.ps", + www_ps_gz_url = PDOSWWW # "/papers/mobicom96.ps.gz", +} + +@inproceedings{rover:sosp95, + title = "{Rover}: a toolkit for mobile information access", + author = "Anthony D. Joseph and {deLespinasse}, Alan F. and Joshua A. Tauber and David K. Gifford and M. Frans Kaashoek", + crossref = "sosp15", + pages = "156--171", + www_section = mobilecomp, + www_ps_url = PDOSWWW # "/papers/rover-sosp95.ps", + www_ps_gz_url = PDOSWWW # "/papers/rover-sosp95.ps.gz", +} + +@inproceedings{dynamic-documents:wmcsa, + title = "Dynamic documents: mobile wireless access to the {WWW}", + author = "M. Frans Kaashoek and Tom Pinckney and Joshua A. Tauber", + crossref = "wmcsa94", + pages = "179--184", + www_section = mobilecomp, + www_abstract_url = PDOSWWW # "/papers/wmcsa94.abstract.html", + www_ps_url = PDOSWWW # "/papers/wmcsa94.ps", + www_ps_gz_url = PDOSWWW # "/papers/wmcsa94.ps.gz", +} + +@inproceedings{mobile-storage-alt:osdi1, + title = "Storage alternatives for mobile computers", + author = "Fred Douglis and Ramón Cáceres and M. Frans Kaashoek and Kai Li and Brian Marsh and Joshua A. Tauber", + crossref = "osdi1", + pages = "25--37", + www_section = mobilecomp, + www_ps_url = PDOSWWW # "/papers/storage-alternatives.ps" +} + +@inproceedings{dynamic-documents:www94, + title = "Dynamic documents: extensibility and adaptability in the {WWW}", + author = "M. Frans Kaashoek and Tom Pinckney and Joshua A. Tauber", + crossref = "www94", + edition = "developers' day track", + www_section = mobilecomp, + www_ps_url = PDOSWWW # "/papers/www94.ps", + www_ps_gz_url = PDOSWWW # "/papers/www94.ps.gz", + www_html_url = PDOSWWW # "/papers/www94.html", +} + + +%% STORAGE MANAGEMENT + +@string{storage = "Storage Management"} + +@inproceedings{cffs:usenix97, + title = "Embedded inodes and explicit grouping: exploiting disk bandwidth for small files", + author = "Gregory R. Ganger and M. Frans Kaashoek", + crossref = "usenix97", + pages = "1--17", + www_section = storage, + www_abstract_url = PDOSWWW # "/papers/cffs.html", + www_ps_url = PDOSWWW # "/papers/cffs-usenix97.ps", + www_ps_gz_url = PDOSWWW # "/papers/cffs-usenix97.ps.gz", +} + +@inproceedings{arus:dcs16, + title = "Atomic recovery units: failure atomicity for logical disks", + author = "Robert Grimm and Wilson C. Hsieh and Wiebren de Jonge and M. Frans Kaashoek", + crossref = "dcs16", + pages = "26--37", + www_section = storage, + www_ps_url = PDOSWWW # "/papers/arus.ps", +} + +@inproceedings{logicaldisk:sosp14, + title = "The logical disk: a new approach to improving file systems", + author = "Wiebren de Jonge and M. Frans Kaashoek and Wilson C. Hsieh", + crossref = "sosp14", + pages = "15--28", + www_section = storage, + www_ps_url = PDOSWWW # "/papers/LogicalDisk.ps" +} + + +%% EXOKERNEL PAPERS + +@string{exokernels = "Exokernels"} + +@article{exo:tocs2002, + title = "{F}ast and flexible Application-Level Networking on Exokernel Systems", + author = "Gregory R. Ganger and Dawson R. Engler and M. Frans Kaashoek and Hector M. Briceno and Russell Hunt and Thomas Pinckney", + crossref = "journal:tocs", + volume = 20, + number = 1, + year = 2002, + month = feb, + pages = "49--83", + www_section = exokernels, + www_abstract_url = PDOSWWW # "papers/exo:tocs.html", + www_pdf_url = PDOSWWW # "papers/exo:tocs.pdf", + www_ps_url = PDOSWWW # "papers/exo:tocs.ps", + www_ps_gz_url = PDOSWWW # "papers/exo:tocs.ps.gz" +} + +@inproceedings{exo:sosp97, + title = "Application performance and flexibility on exokernel systems", + author = "M. Frans Kaashoek and Dawson R. Engler and Gregory R. Ganger and H{\'e}ctor M. Brice{\~n}o and Russell Hunt and David Mazi{\`e}res and Thomas Pinckney and Robert Grimm and John Jannotti and Kenneth Mackenzie", + pages = "52--65", + crossref = "sosp16", + www_section = exokernels, + www_abstract_url = PDOSWWW # "/papers/exo-sosp97.html", + www_html_url = PDOSWWW # "/papers/exo-sosp97/exo-sosp97.html", + www_ps_url = PDOSWWW # "/papers/exo-sosp97/exo-sosp97.ps", + www_ps_gz_url = PDOSWWW # "/papers/exo-sosp97/exo-sosp97.ps.gz", +} + +@inproceedings{exo:sosp95, + title = "{E}xokernel: an operating system architecture for application-level resource management", + author = "Dawson R. Engler and M. Frans Kaashoek and James {O'Toole Jr.}", + pages = "251--266", + crossref = "sosp15", + www_section = exokernels, + www_ps_url = PDOSWWW # "/papers/exokernel-sosp95.ps", +} + +@inproceedings{exo:osdi1, + title = "The exokernel approach to extensibility (panel statement)", + author = "Dawson R. Engler and M. Frans Kaashoek and {O'Toole Jr.}, James W.", + pages = "198", + crossref = "osdi1", + www_section = exokernels, + www_ps_url = PDOSWWW # "/papers/exo-abstract.ps", +} + +@inproceedings{exo:hotos5, + title = "Exterminate all operating system abstractions", + author = "Dawson R. Engler and M. Frans Kaashoek", + pages = "78--83", + crossref = "hotos5", + www_section = exokernels, + www_ps_url = PDOSWWW # "/papers/hotos-jeremiad.ps", +} + +@article{exo:osr, + title = "The operating system kernel as a secure programmable machine", + author = "Dawson R. Engler and M. Frans Kaashoek and {O'Toole Jr.}, James W.", + crossref = "journal:osr", + year = 1995, month = jan, + volume = 29, number = 1, + pages = "78--82", + www_section = exokernels, + www_ps_url = PDOSWWW # "/papers/osr-exo.ps", +} + +@inproceedings{exo:sigops-euro, + title = "The operating system kernel as a secure programmable machine", + author = "Dawson R. Engler and M. Frans Kaashoek and {O'Toole Jr.}, James W.", + crossref = "sigops-euro6", + pages = "62--67", + www_section = exokernels, + www_ps_url = PDOSWWW # "/papers/xsigops.ps", +} + + +%% DYNAMIC CODE GENERATION + +@string{dcg = "Dynamic Code Generation"} + +@article{tickc:toplas, + title = "{`C} and {tcc}: A language and compiler for dynamic code generation" + author = "Massimiliano Poletto and Wilson C. Hsieh and Dawson R. Engler and M. Frans Kaashoek", + crossref = "journal:toplas", + volume = 21, number = 2, + year = 1999, month = mar, + pages = "324--369", + www_section = dcg, + www_ps_url = PDOSWWW # "/papers/tickc-toplas.ps", +} + +@article{linearscan, + title = "Linear scan register allocation", + author = "Massimiliano Poletto and Vivek Sarkar", + crossref = "journal:toplas", + volume = 21, number = 5, + year = 1999, month = sep, + pages = "895--913", + www_section = dcg, + www_ps_url = PDOSWWW # "/papers/toplas-linearscan.ps", +} + +@inproceedings{tickc:pldi97, + title = "tcc: a system for fast, flexible, and high-level dynamic code generation", + author = "Massimiliano Poletto and Dawson R. Engler and M. Frans Kaashoek", + crossref = "pldi97", + pages = "109--121", + www_section = dcg, + www_ps_url = PDOSWWW # "/papers/tcc-pldi97.ps", +} + +@inproceedings{tickc:popl96, + title = "{`C}: A language for efficient, machine-independent dynamic code generation", + author = "Dawson R. Engler and Wilson C. Hsieh and M. Frans Kaashoek", + crossref = "popl96", + pages = "131--144", + www_section = dcg, + www_ps_url = PDOSWWW # "/papers/popl96.ps", + note = "An earlier version is available as MIT-LCS-TM-526", +} + +@inproceedings{tickc:wcsss96, + title = "tcc: a template-based compiler for {`C}", + author = "Massimiliano Poletto and Dawson R. Engler and M. Frans Kaashoek", + crossref = "wcsss96", + pages = "1--7", + www_section = dcg, + www_ps_url = PDOSWWW # "/papers/tcc-wcsss96.ps" +} + +@inproceedings{vcode:pldi96, + title = "{VCODE}: a retargetable, extensible, very fast dynamic code generation system", + author = "Dawson R. Engler", + crossref = "pldi96", + pages = "160--170", + www_section = dcg, + www_ps_url = PDOSWWW # "/papers/vcode-pldi96.ps", +} + +@inproceedings{dcg:asplos6, + title = "{DCG}: an efficient, retargetable dynamic code generation system", + author = "Dawson R. Engler and Todd A. Proebsting", + crossref = "asplos6", + pages = "263--272", + www_section = dcg, + www_ps_url = PDOSWWW # "/papers/dcg.ps", +} + + +%% PROGRAMMING LANGUAGES + +@string{proglang = "Programming Languages"} + +@inproceedings{pct:usenix02, + title = "Simple and General Statistical Profiling with PCT", + author = "Charles Blake and Steve Bauer", + crossref = "usenix02", + pages = "333--346" + www_section = proglang, + www_abstract_url = PDOSWWW # "/papers/pct:usenix02/", + www_ps_url = PDOSWWW # "/papers/pct:usenix02/blake02:pct.ps", + www_ps_gz_url = PDOSWWW # "/papers/pct:usenix02/blake02:pct.ps.gz", + www_pdf_url = PDOSWWW # "/papers/pct:usenix02/blake02:pct.pdf", +} + +@inproceedings{evolving-software:wcsss99, + title = "Evolving software with an application-specific language", + author = "Eddie Kohler and Massimiliano Poletto and David R. Montgomery", + crossref = "wcsss99", + pages = "94--102", + www_section = proglang, + www_abstract_url = PDOSWWW # "/papers/evolving-software:wcsss99/", + www_ps_url = PDOSWWW # "/papers/evolving-software:wcsss99/paper.ps", + www_pdf_url = PDOSWWW # "/papers/evolving-software:wcsss99/paper.pdf", +} + + +%% STORAGE MANAGEMENT + +@string{storage = "Storage Management"} + +@inproceedings{cffs:usenix97, + title = "Embedded inodes and explicit grouping: exploiting disk bandwidth for small files", + author = "Gregory R. Ganger and M. Frans Kaashoek", + crossref = "usenix97", + pages = "1--17", + www_section = storage, + www_abstract_url = PDOSWWW # "/papers/cffs.html", + www_ps_url = PDOSWWW # "/papers/cffs-usenix97.ps", + www_ps_gz_url = PDOSWWW # "/papers/cffs-usenix97.ps.gz", +} + +@inproceedings{arus:dcs16, + title = "Atomic recovery units: failure atomicity for logical disks", + author = "Robert Grimm and Wilson C. Hsieh and Wiebren de Jonge and M. Frans Kaashoek", + crossref = "dcs16", + pages = "26--37", + www_section = storage, + www_ps_url = PDOSWWW # "/papers/arus.ps", +} + +@inproceedings{logicaldisk:sosp14, + title = "The logical disk: a new approach to improving file systems", + author = "Wiebren de Jonge and M. Frans Kaashoek and Wilson C. Hsieh", + crossref = "sosp14", + pages = "15--28", + www_section = storage, + www_ps_url = PDOSWWW # "/papers/LogicalDisk.ps" +} + + +%% VIRTUAL MEMORY + +@string{vm = "Virtual Memory"} + +@inproceedings{avm:hotos5, + title = "{AVM}: application-level virtual memory", + author = "Dawson R. Engler and Sandeep K. Gupta and M. Frans Kaashoek", + crossref = "hotos5", + pages = "72--77", + www_section = vm, + www_ps_url = PDOSWWW # "/papers/hotos-uvm.ps", +} + +@inproceedings{software-tlb-prefetch:osdi1, + title = "Software prefetching and caching for translation lookaside buffers", + author = "Kavita Bala and M. Frans Kaashoek and William Weihl", + crossref = "osdi1", + pages = "243--253", + www_section = vm, + www_ps_url = PDOSWWW # "/papers/tlb.ps", +} + + + + +%% DISTRIBUTED SHARED MEMORY AND PARALLEL COMPUTING + +@string{dsm/parallel = "Distributed Shared Memory and Parallel Computing"} + +@inproceedings{dynamic-migration:supercomp96, + title = "Dynamic computation migration in distributed +shared memory systems", + author = "Wilson C. Hsieh and M. Frans Kaashoek and William E. Weihl", + crossref = "supercomp96", + www_section = dsm/parallel, + www_ps_url = PDOSWWW # "/papers/mcrl.ps" +} + +@inproceedings{crl:sosp95, + title = "{CRL}: high-performance all-software distributed shared memory", + author = "Kirk L. Johnson and M. Frans Kaashoek and Deborah A. Wallach", + crossref = "sosp15", + pages = "213--226", + www_section = dsm/parallel, + www_ps_url = PDOSWWW # "/papers/crl-sosp95.ps" + note = "An earlier version of this work appeared as Technical Report MIT-LCS-TM-517, MIT Laboratory for Computer Science, March 1995", +} + +@inproceedings{formal-sequential-consistent:dcs15, + title = "Implementing sequentially consistent shared objects using broadcast and point-to-point communication", + author = "Alan Fekete and M. Frans Kaashoek and Nancy Lynch", + crossref = "dcs15", + pages = "439--449", + www_section = dsm/parallel, + www_ps_url = PDOSWWW # "/papers/formal.ps" +} + +@techreport{formal-sequential-consistent:tr, + title = "Implementing sequentially consistent shared objects using broadcast and point-to-point communication", + author = "Alan Fekete and M. Frans Kaashoek and Nancy Lynch", + institution = MIT-LCS, + year = 1995, month = jun, + number = "MIT-LCS-TR-518", + www_section = dsm/parallel, + www_ps_url = PDOSWWW # "/papers/formaltr.ps" +} + +%@inproceedings{triangle-puzzle:dimacs94, +% title = "A case study of shared-memory and +%message-passing implementations of parallel breadth-first search: The +%triangle puzzle", +% author = "Kevin Lew and Kirk Johnson and M. Frans Kaashoek", +% crossref = "dimacs94", +% www_section = dsm/parallel, +% www_ps_url = PDOSWWW # "/papers/dimacs94.ps" +%} + + +%% PHD THESES + +@string{phdtheses = "Ph.D. Theses"} + +@phdthesis{snoeren-phd, + title = "A Session-Based Architecture for Internet Mobility", + author = "Alex C. Snoeren", + school = MIT, + year = 2002, month = dec, + www_section = phdtheses, + www_ps_url = "http://nms.lcs.mit.edu/~snoeren/papers/thesis/thesis.ps", + www_ps_gz_url = "http://nms.lcs.mit.edu/~snoeren/papers/thesis/thesis.ps.gz" + www_pdf_url = "http://nms.lcs.mit.edu/~snoeren/papers/thesis/thesis.pdf", +} + +@phdthesis{jannotti-phd, + title = "Network Layer Support for Overlay Networks", + author = "John Jannotti", + school = MIT, + year = 2002, month = aug, + www_section = phdtheses, + www_ps_url = PDOSWWW # "/papers/jannotti-phd.ps", + www_ps_gz_url = PDOSWWW # "/papers/jannotti-phd.ps.gz", + www_pdf_url = PDOSWWW # "/papers/jannotti-phd.pdf" +} + +@phdthesis{click:kohler-phd, + title = "The Click modular router", + author = "Eddie Kohler", + school = MIT, + year = 2000, month = nov, + www_section = phdtheses, + www_ps_gz_url = PDOSWWW # "/papers/click:kohler-phd/thesis.ps.gz", + www_pdf_url = PDOSWWW # "/papers/click:kohler-phd/thesis.pdf" +} + +@phdthesis{sfs:mazieres-phd, + title = "Self-certifying File System", + author = "David Mazieres", + school = MIT, + year = 2000, month = may, + www_section = phdtheses, + www_ps_gz_url = PDOSWWW # "/papers/sfs:mazieres-phd.ps.gz" +} + +@phdthesis{tickc:poletto-phd, + title = "Language and compiler support for dynamic code generation", + author = "Massimiliano Poletto", + school = MIT, + year = 1999, month = jun, + www_section = phdtheses, + www_ps_url = PDOSWWW # "/papers/tickc-poletto-phd.ps", + www_ps_gz_url = PDOSWWW # "/papers/tickc-poletto-phd.ps.gz", + www_pdf_url = PDOSWWW # "/papers/tickc-poletto-phd.pdf" +} + +@phdthesis{exo:engler-phd, + title = "The exokernel operating system architecture", + author = "Dawson R. Engler", + school = MIT, + year = 1998, month = oct, + www_section = phdtheses, + www_ps_url = PDOSWWW # "/exo/theses/engler/thesis.ps", + www_ps_gz_url = PDOSWWW # "/exo/theses/engler/thesis.ps.gz", +} + +@phdthesis{fugu:mackenzie-phd, + title = "An efficient virtual network interface in the {FUGU} scalable workstation", + author = "Kenneth M. Mackenzie", + school = MIT, + year = 1998, month = feb, + www_section = phdtheses, + www_ps_gz_url = PDOSWWW # "/exo/theses/kenmac/thesis.ps.gz", +} + +@phdthesis{app-specific-networking:wallach-phd, + title = "High-performance application-specific networking", + author = "Deborah Anne Wallach", + school = MIT, + year = 1997, month = jan, + www_section = phdtheses, + www_ps_url = PDOSWWW # "/exo/theses/kerr/thesis.ps", + www_ps_gz_url = PDOSWWW # "/exo/theses/kerr/thesis.ps.gz", +} + +@phdthesis{crl:johnson-phd, + title = "High-performance all-software distributed shared memory", + author = "Kirk L. Johnson", + school = MIT, + year = 1995, month = dec, + www_section = phdtheses, + www_ps_gz_url = PDOSWWW # "/papers/crl:johnson-phd.ps.gz", + www_abstract_url = "http://www.cag.lcs.mit.edu/~tuna/papers/thesis.html", +} + +@phdthesis{dyn-comp-migration:hsieh-phd, + title = "Dynamic computation migration in distributed shared memory systems", + author = "Wilson C. Hsieh", + school = MIT, + year = 1995, month = sep, + www_section = phdtheses, + www_pdf_url = PDOSWWW # "/papers/dyn-comp-migration:hsieh-phd.pdf", + note = "Also available as MIT LCS tech report MIT-LCS-TR-665." +} + + +%% MASTERS THESES + +@string{masterstheses = "Master's Theses"} + +@mastersthesis{sfs:savvides-meng, + title = "Access Control Lists for the Self-Certifying Filesystem" + author = "George Savvides", + school = MIT, + year = 2002, month = Aug, + www_section = masterstheses, + www_pdf_url = PDOSWWW # "/papers/sfs:savvides-meng.pdf", + www_ps_url = PDOSWWW # "/papers/sfs:savvides-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/sfs:savvides-meng.ps.gz", +} + +@mastersthesis{sfs:euresti-meng, + title = "Self-Certifying Filesystem Implementation for Windows" + author = "David Euresti", + school = MIT, + year = 2002, month = Aug, + www_section = masterstheses, + www_pdf_url = PDOSWWW # "/papers/sfs:euresti-meng.pdf", + www_ps_url = PDOSWWW # "/papers/sfs:euresti-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/sfs:euresti-meng.ps.gz", +} + +@mastersthesis{sfs:zeldovich-meng, + title = "Concurrency Control for Multi-Processor Event-Driven Systems" + author = "Nickolai Zeldovich", + school = MIT, + year = 2002, month = May, + www_section = masterstheses, + www_pdf_url = PDOSWWW # "/papers/sfs:zeldovich-meng.pdf", + www_ps_url = PDOSWWW # "/papers/sfs:zeldovich-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/sfs:zeldovich-meng.ps.gz", +} + +@mastersthesis{chord:om_p-meng, + title = "A Keyword Set Search System for Peer-to-Peer Networks" + author = "Omprakash D Gnawali", + school = MIT, + year = 2002, month = Jun, + www_section = masterstheses, + www_pdf_url = PDOSWWW # "/papers/chord:om_p-meng.pdf", + www_ps_url = PDOSWWW # "/papers/chord:om_p-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/chord:om_p-meng.ps.gz", +} + +@mastersthesis{grid:bac-meng, + title = "The Grid Roofnet: a Rooftop Ad Hoc Wireless Network" + author = "Benjamin A. Chambers", + school = MIT, + year = 2002, month = May, + www_section = masterstheses, + www_pdf_url = PDOSWWW # "/papers/grid:bac-meng.pdf", + www_ps_url = PDOSWWW # "/papers/grid:bac-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/grid:bac-meng.ps.gz", +} + +@mastersthesis{tarzan:freedman-meng, + title = "A Peer-to-Peer Anonymizing Network Layer" + author = "Michael J. Freedman", + school = MIT, + year = 2002, month = May, + www_section = masterstheses, + www_abstract_url = PDOSWWW # "/papers/tarzan:freedman-meng/index.html", + www_pdf_url = PDOSWWW # "/papers/tarzan:freedman-meng/tarzan:freedman-meng.pdf", + www_ps_url = PDOSWWW # "/papers/tarzan:freedman-meng/tarzan:freedman-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/tarzan:freedman-meng/tarzan:freedman-meng.ps.gz", +} + + +@mastersthesis{chord:tburkard-meng, + title = "Herodotus: A Peer-to-Peer Web Archival System" + author = "Timo Burkard", + school = MIT, + year = 2002, month = May, + www_section = masterstheses, + www_pdf_url = PDOSWWW # "/papers/chord:tburkard-meng.pdf", + www_ps_url = PDOSWWW # "/papers/chord:tburkard-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/chord:tburkard-meng.ps.gz", +} + +@mastersthesis{cfs:dabek-meng, + title = "A Cooperative File System" + author = "Frank Dabek", + school = MIT, + year = 2001, month = September, + www_section = masterstheses, + www_pdf_url = PDOSWWW # "/papers/chord:dabek_thesis/dabek.pdf", + www_ps_url = PDOSWWW # "/papers/chord:dabek_thesis/dabek.ps", + www_ps_gz_url = PDOSWWW # "/papers/chord:dabek_thesis/tyan-meng.ps.gz", +} + +@mastersthesis{chord:tyan-meng, + title = "A Case Study of Server Selection", + author = "Tina Tyan", + school = MIT, + year = 2001, month = September, + www_section = masterstheses, + www_pdf_url = PDOSWWW # "/papers/chord:tyan-meng.pdf", + www_ps_url = PDOSWWW # "/papers/chord:tyan-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/chord:tyan-meng.ps.gz", +} + +@mastersthesis{click:gil-ms, + title = "MULTOPS: a data structure for denial-of-service attack detection", + author = "Thomer M. Gil", + school = "Vrije Universiteit", + year = 2000, month = August, + www_section = masterstheses, + www_ps_gz_url = PDOSWWW # "/papers/click:gil-ms.ps.gz", +} + +@mastersthesis{click:sit-ms, + title = "A Study of Caching in the Internet Domain Name System", + author = "Emil Sit", + school = MIT, + year = 2000, month = may, + www_section = masterstheses, + www_ps_gz_url = PDOSWWW # "/papers/click:sit-ms.ps.gz", +} + + +@mastersthesis{sfs:kaminsky-ms, + title = "Flexible Key Management with SFS Agents", + author = "Michael Kaminsky", + school = MIT, + year = 2000, month = may, + www_section = masterstheses, + www_ps_gz_url = PDOSWWW # "/papers/sfs:kaminsky-ms.ps.gz", + www_pdf_url = PDOSWWW # "/papers/sfs:kaminsky-ms.pdf", +} + +@mastersthesis{sfs:almeida-ms, + title = "Framework for Implementing File Systems in Windows NT", + author = "Danilo Almeida", + school = MIT, + year = 1998, month = may, + www_section = masterstheses, + www_ps_gz_url = PDOSWWW # "/papers/sfs:almeida-ms.ps.gz", + www_pdf_url = PDOSWWW # "/papers/sfs:almeida-ms.pdf", +} + +@mastersthesis{sfs:rimer-ms, + title = "The Secure File System under Windows NT", + author = "Matthew Rimer", + school = MIT, + year = 1999, month = June, + www_section = masterstheses, + www_ps_gz_url = PDOSWWW # "/papers/sfs:rimer-ms.ps.gz", + www_pdf_url = PDOSWWW # "/papers/sfs:rimer-ms.pdf", +} + +@mastersthesis{prolac:montgomery-meng, + title = "A fast {Prolac} {TCP} for the real world", + author = "Montgomery, Jr., David Rogers", + school = MIT, + year = 1999, month = may, + www_section = masterstheses, + www_ps_gz_url = PDOSWWW # "/papers/prolac:montgomery-meng.ps.gz", +} + +@mastersthesis{exo:coffing-meng, + title = "An x86 Protected Mode Virtual Machine Monitor for the MIT Exokernel", + author = "Charles L. Coffing", + school = MIT, + year = 1999, month = May, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/papers/exo:coffing-meng.ps", + www_ps_gz_url = PDOSWWW # "/papers/exo:coffing-meng.ps.gz", +} + +@mastersthesis{exo:chen-meng, + title = "Multiprocessing with the Exokernel Operating System", + author = "Benjie Chen", + school = MIT, + year = 2000, month = February, + www_section = masterstheses, + www_html_url = PDOSWWW # "/papers/exo:chen-meng.html", + www_ps_url = PDOSWWW # "/papers/exo:chen-meng.ps", + www_pdf_url = PDOSWWW # "/papers/exo:chen-meng.pdf", + www_ps_gz_url = PDOSWWW # "/papers/exo:chen-meng.ps.gz", +} + +@mastersthesis{exo:candea-meng, + title = "Flexible and efficient sharing of protected abstractions", + author = "George M. Candea", + school = MIT, + year = 1998, month = may, + www_section = masterstheses, + www_abstract_url = PDOSWWW # "/papers/candea-meng.html", + www_ps_url = PDOSWWW # "/papers/ProtAbs.ps", + www_ps_gz_url = PDOSWWW # "/papers/ProtAbs.ps.gz", + www_pdf_url = PDOSWWW # "/papers/ProtAbs.pdf", +} + +@mastersthesis{exo-os:jj-meng, + title = "Applying Exokernel Principles to Conventional Operating Systems", + author = "John Jannotti", + school = MIT, + year = 1998, month = feb, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/papers/jj-meng-exo-feb98.ps", + www_ps_gz_url = PDOSWWW # "/papers/jj-meng-exo-feb98.ps.gz", + www_pdf_url = PDOSWWW # "/papers/jj-meng-exo-feb98.pdf", +} + +@mastersthesis{pan:nygren-meng, + title = "The design and implementation of a high-performance active network node", + author = "Erik L. Nygren", + school = MIT, + year = 1998, month = feb, + www_section = masterstheses, + www_abstract_url = PDOSWWW # "/papers/nygren-mengthesis-pan-feb98.html", + www_ps_url = PDOSWWW # "/papers/nygren-mengthesis-pan-feb98.ps", + www_ps_gz_url = PDOSWWW # "/papers/nygren-mengthesis-pan-feb98.ps.gz", + www_pdf_url = PDOSWWW # "/papers/nygren-mengthesis-pan-feb98.pdf", +} + +@mastersthesis{exo:wyatt-meng, + title = "Shared libraries in an exokernel operating system", + author = "Douglas Karl Wyatt", + school = MIT, + year = 1997, month = sep, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/exo/theses/dwyatt/thesis.ps", + www_ps_gz_url = PDOSWWW # "/exo/theses/dwyatt/thesis.ps.gz", +} + +@mastersthesis{prolac:kohler-ms, + title = "Prolac: a language for protocol compilation", + author = "Eddie Kohler", + school = MIT, + year = 1997, month = sep, + www_section = masterstheses, + www_ps_gz_url = PDOSWWW # "/papers/prolac:kohler-ms.ps.gz", + www_pdf_url = PDOSWWW # "/papers/prolac:kohler-ms.pdf", +} + +@mastersthesis{sfs:mazieres-ms, + title = "Security and decentralized control in the {SFS} global file system", + author = "David Mazi{\`e}res", + school = MIT, + year = 1997, month = aug, + www_section = masterstheses, + www_ps_gz_url = PDOSWWW # "/papers/sfs:mazieres-ms.ps.gz" +} + +@mastersthesis{exo:pinckney-meng, + title = "Operating system extensibility through event capture", + author = "Thomas {Pinckney III}", + school = MIT, + year = 1997, month = feb, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/exo/theses/pinckney/thesis.ps", + www_ps_gz_url = PDOSWWW # "/exo/theses/pinckney/thesis.ps.gz", +} + +@mastersthesis{exo:briceno-meng, + title = "Decentralizing {UNIX} abstractions in the exokernel architecture", + author = "H{\'e}ctor Manuel {Brice{\~n}o Pulido}", + school = MIT, + year = 1997, month = feb, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/exo/theses/hbriceno/thesis.ps", + www_ps_gz_url = PDOSWWW # "/exo/theses/hbriceno/thesis.ps.gz", +} + +@mastersthesis{rover:nntp, + title = "The {Rover} {NNTP} proxy", + author = "Constantine Cristakos", + school = MIT, + year = 1996, month = jun, + type = "Advanced Undergraduate Project", + www_section = masterstheses, + www_ps_url = PDOSWWW # "/papers/DeanAUP.ps", + www_ps_gz_url = PDOSWWW # "/papers/DeanAUP.ps.gz", +} + +@mastersthesis{exo:grimm-ms, + title = "Exodisk: maximizing application control over storage management", + author = "Robert Grimm", + school = MIT, + year = 1996, month = may, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/exo/theses/rgrimm/thesis.ps", + www_ps_gz_url = PDOSWWW # "/exo/theses/rgrimm/thesis.ps.gz", +} + +@mastersthesis{rover:tauber-ms, + title = "Issues in building mobile-aware applications with the {Rover} toolkit", + author = "Joshua A. Tauber", + school = MIT, + year = 1996, month = may, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/papers/JoshThesis.ps", + www_ps_gz_url = PDOSWWW # "/papers/JoshThesis.ps.gz", +} + +@mastersthesis{rover-mosaic:delespinasse-thesis, + title = "{Rover} {Mosaic}: e-mail communication for a full-function {Web} browser", + author = "Alan F. {deLespinasse}", + school = MIT, + year = 1995, month = jun, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/papers/RoverMosaicThesis.ps", + www_ps_gz_url = PDOSWWW # "/papers/RoverMosaicThesis.ps.gz", +} + +@mastersthesis{r2over-mosaic:delespinasse-thesis, + title = {{Rover} {Mosaic}: e-mail communication for a full-function {Web} browser}, + author = "Alan F. {deLespinasse}", + school = MIT, + year = 1995, month = jun, + www_section = masterstheses, + www_ps_url = PDOSWWW # "/papers/RoverMosaicThesis.ps", + www_ps_gz_url = PDOSWWW # "/papers/RoverMosaicThesis.ps.gz", +} + + +%% PROCEEDINGS + +@proceedings{asplos6, + booktitle = "Proceedings of the 6th International Conference on Architectural Support for Programming Languages and Operating Systems ({ASPLOS-VI})", + year = 1994, month = oct, + address = "San Jose, California" +} + +@proceedings{ccs5, + booktitle = "Proceedings of the 5th {ACM} Conference on Computer and Communications Security ({CCS-5})", + year = 1998, month = nov, + address = "San Francisco, California", + bookurl = "http://www.bell-labs.com/user/reiter/ccs5/" +} + +@proceedings{ccs9, + booktitle = "Proceedings of the 9th {ACM} Conference on Computer and Communications Security ({CCS-9})", + year = 2002, month = nov, + address = "Washington, D.C.", + bookurl = "http://www.acm.org/sigs/sigsac/ccs/" +} + +@proceedings{dcs16, + booktitle = "Proceedings of the 16th International Conference on Distributed Computing Systems", + organization = IEEECompSoc, + year = 1996, month = may, + address = "Hong Kong", +} + +@proceedings{dcs15, + booktitle = "Proceedings of the 15th International Conference on Distributed Computing Systems", + organization = IEEECompSoc, + year = 1995, month = jun, + address = "Vancouver, British Columbia", +} + +@proceedings{hotnets1, + booktitle = "Proceedings of the First {W}orkshop on {H}ot {T}opics in {N}etworks ({HotNets-I})", + year = 2002, month = oct, + organization = "{ACM SIGCOMM}", + address = "Princeton, New Jersey", + bookurl = "http://www.cs.washington.edu/hotnets/", +} + +@proceedings{hotos8, + booktitle = "Proceedings of the 8th {W}orkshop on {H}ot {T}opics in {O}perating {S}ystems ({HotOS-VIII})", + year = 2001, month = may, + organization = IEEECompSoc, + address = "Schloss Elmau, Germany", + bookurl = "http://i30www.ira.uka.de/conferences/HotOS/", +} + +@proceedings{hotos6, + booktitle = "Proceedings of the 6th {W}orkshop on {H}ot {T}opics in {O}perating {S}ystems ({HotOS-VI})", + year = 1997, month = may, + organization = IEEECompSoc, + address = "Chatham, Cape Cod, Massachusetts", + bookurl = "http://www.eecs.harvard.edu/hotos", +} + +@proceedings{hotos5, + booktitle = "Proceedings of the 5th {W}orkshop on {H}ot {T}opics in {O}perating {S}ystems ({HotOS-V})", + year = 1995, month = may, + organization = IEEECompSoc, + address = "Orcas Island, Washington", + bookurl = "http://www.research.microsoft.com/research/os/HotOs/", +} + +@proceedings{mobicom96, + booktitle = "Proceedings of the 2nd {ACM} International Conference on Mobile Computing and Networking ({MobiCom} '96)", + year = 1996, month = nov, + address = "Rye, New York", + bookurl = "http://www.acm.org/sigmobile/conf/mobicom96/", +} + +@proceedings{usenix02, + booktitle = "Proceedings of the 2002 USENIX Annual Technical Conference (USENIX '02)", + year = 2002, month = jun, + address = "Monterey, California", + bookurl = "http://www.usenix.org/events/usenix02/", +} + +@proceedings{usenix01, + booktitle = "Proceedings of the 2001 USENIX Annual Technical Conference (USENIX '01)", + year = 2001, month = jun, + address = "Boston, Massachusetts", + bookurl = "http://www.usenix.org/events/usenix01/", +} + +@proceedings{mobicom01, + booktitle = "Proceedings of the 7th {ACM} International Conference on Mobile Computing and Networking", + year = 2001, month = jul, + address = "Rome, Italy", + bookurl = "http://www.research.ibm.com/acm_sigmobile_conf_2001/" +} + +@proceedings{mobicom00, + booktitle = "Proceedings of the 6th {ACM} International Conference on Mobile Computing and Networking ({MobiCom} '00)", + year = 2000, month = aug, + address = "Boston, Massachusetts", + bookurl = "http://www.argreenhouse.com/mobicom2000/", +} + +@proceedings{openarch99, + booktitle = "Proceedings of the 2nd {IEEE} Conference on Open Architectures and Network Programming ({OpenArch} '99)", + year = 1999, month = mar, + address = "New York, New York", + bookurl = "http://www.ctr.columbia.edu/comet/activities/openarch99/", +} + +@proceedings{osdi5, + booktitle = "Proceedings of the 5th {USENIX} {S}ymposium on {O}perating {S}ystems {D}esign and {I}mplementation ({OSDI} '02)", + year = 2002, month = dec, + address = "Boston, Massachusetts", +} + +@proceedings{osdi1, + booktitle = "Proceedings of the 1st {USENIX} {S}ymposium on {O}perating {S}ystems {D}esign and {I}mplementation ({OSDI} '94)", + year = 1994, month = nov, + address = "Monterey, California", + bookurl = "http://www2.cs.utah.edu/~lepreau/osdi94/", +} + +@proceedings{osdi4, + booktitle = "Proceedings of the 4th {USENIX} {S}ymposium on {O}perating {S}ystems {D}esign and {I}mplementation ({OSDI} 2000)", + year = 2000, month = oct, + address = "San Diego, California", + bookurl = "http://www.usenix.org/events/osdi2000/", +} + +@proceedings{pldi97, + booktitle = "Proceedings of the {ACM} {SIGPLAN} '97 Conference on Programming Design and Implementation ({PLDI} '97)", + year = 1997, month = jun, + address = "Las Vegas, Nevada", + bookurl = "http://cs-www.bu.edu/pub/pldi97/", +} + +@proceedings{pldi96, + booktitle = "Proceedings of the {ACM} {SIGPLAN} '96 Conference on Programming Design and Implementation ({PLDI} '96)", + year = 1996, month = may, + address = "Philadelphia, Pennsylvania", +} + +@proceedings{popl96, + booktitle = "Proceedings of the 23rd {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages ({POPL} '96)", + year = 1996, month = jan, + address = "St. Petersburg Beach, Florida", + bookurl = "ftp://parcftp.xerox.com/pub/popl96/popl96.html" +} + +@proceedings{ppopp95, + booktitle = "Proceedings of the 5th {ACM} {SIGPLAN} Symposium on Principles and Practice of Parallel Programming ({PPoPP} '95)", + year = 1995, month = jul, + address = "Santa Barbara, California", + bookurl = "http://www.cs.ucsb.edu/Conferences/PPOPP95/", +} + +@proceedings{sigcomm99, + booktitle = "Proceedings of the {ACM} {SIGCOMM} '99 Conference: Applications, Technologies, Architectures, and Protocols for Computer Communication", + year = 1999, month = aug, + address = "Cambridge, Massachusetts", + bookurl = "http://www.acm.org/sigcomm/sigcomm99/", +} + +@proceedings{sigcomm96, + booktitle = "Proceedings of the {ACM} {SIGCOMM} '96 Conference: Applications, Technologies, Architectures, and Protocols for Computer Communication", + year = 1996, month = aug, + address = "Stanford, California", + bookurl = "http://www.acm.org/sigcomm/sigcomm96/", +} + +@proceedings{sigcommimw01, + booktitle = "Proceedings of the {ACM} {SIGCOMM} Internet Measurement Workshop '01", + year = 2001, month = nov, + address = "San Francisco, California", + bookurl = "http://www.acm.org/sigcomm/measworkshop2001.html" +} + +@proceedings{sigcomm01, + booktitle = "Proceedings of the {ACM} {SIGCOMM} '01 Conference", + year = 2001, month = aug, + address = "San Diego, California", + bookurl = "http://www.acm.org/sigcomm/sigcomm2001/", +} + +@proceedings{iptps02, + booktitle = "Proceedings of the 1st International Workshop on Peer-to-Peer Systems (IPTPS)", + year = 2002, month = mar, + address = "Cambridge, MA", + bookurl = "http://www.cs.rice.edu/Conferences/IPTPS02/" +} + +@proceedings{sigops-euro9, + booktitle = "Proceedings of the 9th {ACM} {SIGOPS} {E}uropean workshop: Beyond the {PC}: New Challenges for the Operating System", + year = 2000, month = sep, + address = "Kolding, Denmark", + bookurl = "http://www.diku.dk/ew2000/", +} + +@proceedings{sigops-euro8, + booktitle = "Proceedings of the 8th {ACM} {SIGOPS} {E}uropean workshop: Support for composing distributed applications", + year = 1998, month = sep, + address = "Sintra, Portugal", + bookurl = "http://www.dsg.cs.tcd.ie/~vjcahill/sigops98/", +} + +@proceedings{sigops-euro7, + booktitle = "Proceedings of the 7th {ACM} {SIGOPS} {E}uropean workshop: Systems support for worldwide applications", + year = 1996, month = sep, + address = "Connemara, Ireland", + bookurl = "http://mosquitonet.stanford.edu/sigops96/", +} + +@proceedings{sigops-euro6, + booktitle = "Proceedings of the 6th {ACM} {SIGOPS} {E}uropean workshop: Matching operating systems to application needs", + year = 1994, month = sep, + address = "Dagstuhl Castle, Wadern, Germany", +} + +@proceedings{sosp18, + booktitle = "Proceedings of the 18th " # SOSP # " ({SOSP} '01)", + year = 2001, month = oct, + address = "Chateau Lake Louise, Banff, Canada", + bookurl = "http://www.cs.ucsd.edu/sosp01/", +} + +@proceedings{sosp17, + booktitle = "Proceedings of the 17th " # SOSP # " ({SOSP} '99)", + year = 1999, month = dec, + address = "Kiawah Island, South Carolina", + bookurl = "http://www.diku.dk/sosp99/", +} + +@proceedings{sosp16, + booktitle = "Proceedings of the 16th " # SOSP # " ({SOSP} '97)", + year = 1997, month = oct, + address = "Saint-Mal{\^o}, France", + bookurl = "http://www.cs.washington.edu/sosp16", +} + +@proceedings{sosp15, + booktitle = "Proceedings of the 15th " # SOSP # " ({SOSP} '95)", + year = 1995, month = dec, + address = "Copper Mountain Resort, Colorado", +} + +@proceedings{sosp14, + booktitle = "Proceedings of the 14th " # SOSP # " ({SOSP} '93)", + year = 1993, month = dec, + address = "Asheville, North Carolina", +} + +@proceedings{supercomp96, + booktitle = "Supercomputing '96 Conference Proceedings: The international conference on high performance computing and communications", + organization = ACMabbr, + year = 1996, month = nov, + address = "Pittsburgh, Pennsylvania", + bookurl = "http://www.supercomp.org/sc96/", +} + +@proceedings{usenix97, + booktitle = "Proceedings of the {USENIX} 1997 Annual Technical Conference", + year = 1997, month = jan, + address = "Anaheim, California", + bookurl = "http://www.usenix.org/ana97/", +} + +@proceedings{wcsss96, + booktitle = "Workshop Record of {WCSSS} '96: The Inaugural Workshop on Compiler Support for Systems Software", + organization = "{ACM} {SIGPLAN}", + year = 1996, month = feb, + address = "Tuscon, Arizona", + bookurl = "http://www.cs.arizona.edu/wcsss96/" +} + +@proceedings{wcsss99, + booktitle = "Workshop Record of {WCSSS} '99: The 2nd {ACM} {SIGPLAN} Workshop on Compiler Support for Systems Software", + year = 1999, month = may, + address = "Atlanta, Georgia", + bookurl = "http://www.irisa.fr/compose/wcsss99/" +} + +@proceedings{wmcsa94, + booktitle = "Proceedings of the Workshop on Mobile Computing Systems and Applications ({WMCSA} '94)", + organization = IEEECompSoc, + year = 1994, month = dec, + address = "Santa Cruz, California", +} + +@proceedings{wwos4, + booktitle = "Proceedings of the 4th Workshop on Workstation Operating Systems", + organization = IEEECompSoc, + year = 1993, month = oct, + address = "Napa, California" +} + +@proceedings{www94, + booktitle = "Proceedings of the 2nd International {WWW} Conference: Mosaic and the Web", + year = 1994, month = oct, + address = "Chicago, Illinois", + bookurl = "http://www.ncsa.uiuc.edu/SDG/IT94/IT94Info-old.html", +} + +@proceedings{sec10, + booktitle = "Proceedings of the 10th {USENIX} {S}ecurity {S}ymposium", + year = 2001, month = aug, + address = "Washington, D.C.", + bookurl = "http://www.usenix.org/events/sec01/", +} + + +%% JOURNALS + +@journal{journal:ieee-toc, + journal = IEEEabbr # " Transactions on Computers", +} + +@journal{journal:osr, + journal = "Operating Systems Review", + organization = ACM, +} + +@journal{journal:toplas, + journal = ACMabbr # " Transactions on Programming Languages and Systems", +} + +@journal{journal:tocs, + journal = ACMabbr # " Transactions on Computer Systems", +} + +@journal{journal:winet, + journal = ACMabbr # " Wireless Networks", +} + diff --git a/writeHTML.py b/writeHTML.py new file mode 100644 index 0000000..c246820 --- /dev/null +++ b/writeHTML.py @@ -0,0 +1,5 @@ +#!/usr/bin/python + +import BiBTeX + + |
