Move things around so there's a single place that specifies PLT people

and places.
This commit is contained in:
Eli Barzilay 2010-09-17 11:14:33 -04:00
parent ee138cf2cb
commit 53adab8271
2 changed files with 126 additions and 63 deletions

View File

@ -1,17 +1,6 @@
#lang at-exp s-exp "shared.rkt"
(define brown-pubs
@a[href: "http://www.cs.brown.edu/~sk/Publications/Papers/"]{
Brown PLT Publications})
(define nwu-pubs
@a[href: "http://www.eecs.northwestern.edu/~robby/pubs/"]{
Northwestern PLT Publications})
(define neu-pubs
@a[href: "http://www.ccs.neu.edu/scheme/pubs/"]{
Northeastern PLT Publications})
(define utah-pubs
@a[href: "http://www.cs.utah.edu/plt/publications/"]{Utah PLT Publications})
;; TODO: add calpoly & byu?
(require "people.rkt" racket/list)
(provide learning)
(define learning
@ -28,8 +17,12 @@
@text{@-teachscheme a workshop to train teachers using @-htdp in the
classroom.}
@text{@-bootstrap a curriculum for middle-school students.}]
@parlist[@strong{Publications}
techreports brown-pubs nwu-pubs neu-pubs utah-pubs]
@(apply parlist @strong{PLT Publications}
(cons techreports
(for*/list ([place (in-list all-places)]
[pubs (in-value (place-pubs-url place))]
#:when pubs)
@a[href: pubs]{@(place-name place)})))
@parlist[@strong{Graduate Study}
@text{We welcome applications from students interested in
@|graduate-study|.}]})
@ -39,6 +32,25 @@
@(define (box-style border-width color)
@list{border: @|border-width|px solid black; padding: 5px; @;
background: @|color|@";"})
@(define place-names
(add-between
(sort (map (lambda (p)
(regexp-replace #rx", [A-Z][A-Z]$" (place-location p) ""))
all-places)
string<?)
" / "))
@(define responsible-people
(let ([people
(for/list ([p (in-list all-places)])
(define edu (place-edu p))
(ormap (lambda (p)
(and (equal? edu (person-responsible-for p)) p))
all-people))])
(add-between
(for/list ([person (sort people string<? #:key person-name)])
@a[href: (person-url person)]{
@(regexp-replace #rx" .*$" (person-name person) "")})
", ")))
@h1{Graduate Study with PLT}
@p{An open letter to graduate applicants:}
@div[style: (box-style 3 "#ddd")]{
@ -52,13 +64,12 @@
we have created the following common application form. By filling it in
once, you can automatically apply to all current PLT institutions.
@~ @|style: (box-style 1 "#bbb")|@;
Yes, we know you don't like Boston/Chicago/Providence/Provo/Salt Lake
City/San Luis Obispo/Worcester (circle those applicable). But we like
them, or we wouldn't be living there. Think about the message you're
sending by rejecting our choices. Moreover, we think very highly of our
colleagues—more highly than we think of your judgment in this matter—so
for your own good, we're going to forward your application to them
anyway.
Yes, we know you don't like @place-names (circle those applicable). But
we like them, or we wouldn't be living there. Think about the message
you're sending by rejecting our choices. Moreover, we think very highly
of our colleagues—more highly than we think of your judgment in this
matter—so for your own good, we're going to forward your application to
them anyway.
@~ How many years have you programmed in Scheme?
@~ How many years have you programmed in PLT Scheme?
@~ If the two numbers above are not identical, justify.
@ -79,13 +90,7 @@
innovation, you should strongly consider graduate study with us. We
look forward to hearing from you. All of us, no matter where we may
live.}
@p[align: 'right]{
—@;
@a[href: "http://www.ccs.neu.edu/home/matthias/"]{Matthias},
@a[href: "http://www.eecs.northwestern.edu/~robby/"]{Robby},
@a[href: "http://www.cs.wpi.edu/~kfisler/"]{Kathi},
@a[href: "http://www.cs.utah.edu/~mflatt/"]{Matthew},
@a[href: "http://www.cs.brown.edu/~sk/"]{Shriram}}})
@p[align: 'right]{—@responsible-people}})
(require "techreports.rkt")

View File

@ -1,46 +1,104 @@
#lang at-exp s-exp "shared.rkt"
;;TODO: combine the info in learning.rkt into a list of structs here
(define places
(ul (map (lambda (p)
(let-values ([(place-name place-url person-name person-url)
(apply values p)])
@li{@a[href: place-url]{@place-name}}))
'(("Brown University, Providence, RI"
(define -all-people- ; "First Last" bib-name|#f responsible-for|#f url
'(["Shriram Krishnamurthi" #f "brown"
"http://www.cs.brown.edu/~sk/"]
["Jay McCarthy" #f "byu"
"http://faculty.cs.byu.edu/~jay/"]
["John Clements" #f "calpoly"
"http://users.csc.calpoly.edu/~clements/"]
["Matthias Felleisen" #f "neu"
"http://www.ccs.neu.edu/home/matthias/"]
["Robby Findler" "Robert Bruce Findler" "northwestern"
"http://www.eecs.northwestern.edu/~robby/"]
["Matthew Flatt" #f "utah"
"http://www.cs.utah.edu/~mflatt/"]
["Kathi Fisler" #f "wpi"
"http://web.cs.wpi.edu/~kfisler/"]))
(define -all-places- ; "Name" "Location, ST" url pubs-url|#
'(["Brown University" "Providence, RI"
"http://www.cs.brown.edu/research/plt/"
"Shriram Krishnamurthi"
"http://www.cs.brown.edu/~sk/")
("Brigham Young University, Provo, UT"
"http://www.cs.brown.edu/~sk/Publications/Papers/"]
["Brigham Young University" "Provo, UT"
"http://faculty.cs.byu.edu/~jay/"
"Jay McCarthy"
"http://faculty.cs.byu.edu/~jay/")
("California Polytechnic State University, San Luis Obispo, CA"
#f]
["California Polytechnic State University" "San Luis Obispo, CA"
"http://users.csc.calpoly.edu/~clements/"
"John Clements"
"http://users.csc.calpoly.edu/~clements/")
("Northeastern University, Boston, MA"
#f]
["Northeastern University" "Boston, MA"
"http://www.ccs.neu.edu/scheme/"
"Matthias Felleisen"
"http://www.ccs.neu.edu/home/matthias/")
("Northwestern University, Evanston, IL"
"http://www.ccs.neu.edu/scheme/pubs/"]
["Northwestern University" "Evanston, IL"
"http://plt.eecs.northwestern.edu/"
"Robert Bruce Findler"
"http://www.eecs.northwestern.edu/~robby/")
("University of Utah, Salt Lake City, UT"
"http://www.eecs.northwestern.edu/~robby/pubs/"]
["University of Utah" "Salt Lake City, UT"
"http://www.cs.utah.edu/plt/"
"Matthew Flatt"
"http://www.cs.utah.edu/~mflatt/")
("Worcester Polytechnic Institute"
"http://www.cs.utah.edu/plt/publications/"]
["Worcester Polytechnic Institute" "Worcester, MA"
"http://web.cs.wpi.edu/~kfisler/"
"Kathi Fisler"
"http://web.cs.wpi.edu/~kfisler/")))))
#f]))
(require racket/list racket/string)
(provide (struct-out person) (struct-out place))
(struct person (name bib-name responsible-for url edu search-string))
(struct place (name location url pubs-url edu search-string))
;; list of all people and places, and functions to search them with some
;; (unique) word
(provide all-people all-places find-person find-place)
(define-values (all-people all-places find-person find-place)
(let ()
(define (make maker url-pos args-list)
(for/list ([args (in-list args-list)])
(let ([url (list-ref args url-pos)]
[search (string-downcase (string-join (filter values args)
"; "))]
[rx #rx"^http://[^/]*[.]([^.]+)[.]edu/"])
(apply maker `(,@args
,(cadr (or (regexp-match rx url)
(error 'person/place
"no X.edu found in ~a" url)))
,search)))))
(define people (make person 3 -all-people-))
(define places (make place 2 -all-places-))
(unless (equal? places (remove-duplicates places #:key place-edu))
(error 'places "found multiple places with the same X.edu url"))
(unless (equal? (sort (map place-edu places) string<?)
(sort (map person-responsible-for people) string<?))
(error 'places/people "no direct mapping between `edu' of places and ~a"
"responsible-for of people"))
(define (finder name all get-search-string)
(let ([t (make-hasheq)])
(lambda (x)
(let ([x (if (string? x) (string->symbol x) x)])
(hash-ref!
t x
(lambda ()
(let* ([rx (regexp-quote (string-downcase (symbol->string x)))]
[rx (pregexp (string-append "\\b" rx "\\b"))])
(let loop ([found #f] [l all])
(cond
[(null? l) (or found (error name "couldn't find: ~.a" x))]
[(not (regexp-match? rx (get-search-string (car l))))
(loop found (cdr l))]
[found (error name "ambiguous search: ~.a" x)]
[else (loop (car l) (cdr l))])))))))))
(values people places
(finder 'find-person people person-search-string)
(finder 'find-place places place-search-string))))
(provide people)
(define people
@page[#:part-of 'community]{
@p{“PLT” refers to the group that is the core of the Racket development
team. PLT consists of numerous people distributed across several
different universities in the USA: @places}
different universities in the USA:
@(ul (map (lambda (p)
@li{@a[href: (place-url p)]{
@(place-name p), @(place-location p)}})
all-places))}
@h4{Affiliates}
@p{We work with
@ul*{@~ The crew at @a[href: "http://untyped.com"]{Untyped}