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" #lang at-exp s-exp "shared.rkt"
(define brown-pubs (require "people.rkt" racket/list)
@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?
(provide learning) (provide learning)
(define learning (define learning
@ -28,8 +17,12 @@
@text{@-teachscheme a workshop to train teachers using @-htdp in the @text{@-teachscheme a workshop to train teachers using @-htdp in the
classroom.} classroom.}
@text{@-bootstrap a curriculum for middle-school students.}] @text{@-bootstrap a curriculum for middle-school students.}]
@parlist[@strong{Publications} @(apply parlist @strong{PLT Publications}
techreports brown-pubs nwu-pubs neu-pubs utah-pubs] (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} @parlist[@strong{Graduate Study}
@text{We welcome applications from students interested in @text{We welcome applications from students interested in
@|graduate-study|.}]}) @|graduate-study|.}]})
@ -39,6 +32,25 @@
@(define (box-style border-width color) @(define (box-style border-width color)
@list{border: @|border-width|px solid black; padding: 5px; @; @list{border: @|border-width|px solid black; padding: 5px; @;
background: @|color|@";"}) 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} @h1{Graduate Study with PLT}
@p{An open letter to graduate applicants:} @p{An open letter to graduate applicants:}
@div[style: (box-style 3 "#ddd")]{ @div[style: (box-style 3 "#ddd")]{
@ -52,13 +64,12 @@
we have created the following common application form. By filling it in we have created the following common application form. By filling it in
once, you can automatically apply to all current PLT institutions. once, you can automatically apply to all current PLT institutions.
@~ @|style: (box-style 1 "#bbb")|@; @~ @|style: (box-style 1 "#bbb")|@;
Yes, we know you don't like Boston/Chicago/Providence/Provo/Salt Lake Yes, we know you don't like @place-names (circle those applicable). But
City/San Luis Obispo/Worcester (circle those applicable). But we like we like them, or we wouldn't be living there. Think about the message
them, or we wouldn't be living there. Think about the message you're you're sending by rejecting our choices. Moreover, we think very highly
sending by rejecting our choices. Moreover, we think very highly of our of our colleagues—more highly than we think of your judgment in this
colleagues—more highly than we think of your judgment in this matter—so matter—so for your own good, we're going to forward your application to
for your own good, we're going to forward your application to them them anyway.
anyway.
@~ How many years have you programmed in Scheme? @~ How many years have you programmed in Scheme?
@~ How many years have you programmed in PLT Scheme? @~ How many years have you programmed in PLT Scheme?
@~ If the two numbers above are not identical, justify. @~ If the two numbers above are not identical, justify.
@ -79,13 +90,7 @@
innovation, you should strongly consider graduate study with us. We innovation, you should strongly consider graduate study with us. We
look forward to hearing from you. All of us, no matter where we may look forward to hearing from you. All of us, no matter where we may
live.} live.}
@p[align: 'right]{ @p[align: 'right]{—@responsible-people}})
—@;
@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}}})
(require "techreports.rkt") (require "techreports.rkt")

View File

@ -1,46 +1,104 @@
#lang at-exp s-exp "shared.rkt" #lang at-exp s-exp "shared.rkt"
;;TODO: combine the info in learning.rkt into a list of structs here (define -all-people- ; "First Last" bib-name|#f responsible-for|#f url
(define places '(["Shriram Krishnamurthi" #f "brown"
(ul (map (lambda (p) "http://www.cs.brown.edu/~sk/"]
(let-values ([(place-name place-url person-name person-url) ["Jay McCarthy" #f "byu"
(apply values p)]) "http://faculty.cs.byu.edu/~jay/"]
@li{@a[href: place-url]{@place-name}})) ["John Clements" #f "calpoly"
'(("Brown University, Providence, RI" "http://users.csc.calpoly.edu/~clements/"]
"http://www.cs.brown.edu/research/plt/" ["Matthias Felleisen" #f "neu"
"Shriram Krishnamurthi" "http://www.ccs.neu.edu/home/matthias/"]
"http://www.cs.brown.edu/~sk/") ["Robby Findler" "Robert Bruce Findler" "northwestern"
("Brigham Young University, Provo, UT" "http://www.eecs.northwestern.edu/~robby/"]
"http://faculty.cs.byu.edu/~jay/" ["Matthew Flatt" #f "utah"
"Jay McCarthy" "http://www.cs.utah.edu/~mflatt/"]
"http://faculty.cs.byu.edu/~jay/") ["Kathi Fisler" #f "wpi"
("California Polytechnic State University, San Luis Obispo, CA" "http://web.cs.wpi.edu/~kfisler/"]))
"http://users.csc.calpoly.edu/~clements/"
"John Clements" (define -all-places- ; "Name" "Location, ST" url pubs-url|#
"http://users.csc.calpoly.edu/~clements/") '(["Brown University" "Providence, RI"
("Northeastern University, Boston, MA" "http://www.cs.brown.edu/research/plt/"
"http://www.ccs.neu.edu/scheme/" "http://www.cs.brown.edu/~sk/Publications/Papers/"]
"Matthias Felleisen" ["Brigham Young University" "Provo, UT"
"http://www.ccs.neu.edu/home/matthias/") "http://faculty.cs.byu.edu/~jay/"
("Northwestern University, Evanston, IL" #f]
"http://plt.eecs.northwestern.edu/" ["California Polytechnic State University" "San Luis Obispo, CA"
"Robert Bruce Findler" "http://users.csc.calpoly.edu/~clements/"
"http://www.eecs.northwestern.edu/~robby/") #f]
("University of Utah, Salt Lake City, UT" ["Northeastern University" "Boston, MA"
"http://www.cs.utah.edu/plt/" "http://www.ccs.neu.edu/scheme/"
"Matthew Flatt" "http://www.ccs.neu.edu/scheme/pubs/"]
"http://www.cs.utah.edu/~mflatt/") ["Northwestern University" "Evanston, IL"
("Worcester Polytechnic Institute" "http://plt.eecs.northwestern.edu/"
"http://web.cs.wpi.edu/~kfisler/" "http://www.eecs.northwestern.edu/~robby/pubs/"]
"Kathi Fisler" ["University of Utah" "Salt Lake City, UT"
"http://web.cs.wpi.edu/~kfisler/"))))) "http://www.cs.utah.edu/plt/"
"http://www.cs.utah.edu/plt/publications/"]
["Worcester Polytechnic Institute" "Worcester, MA"
"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) (provide people)
(define people (define people
@page[#:part-of 'community]{ @page[#:part-of 'community]{
@p{“PLT” refers to the group that is the core of the Racket development @p{“PLT” refers to the group that is the core of the Racket development
team. PLT consists of numerous people distributed across several 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} @h4{Affiliates}
@p{We work with @p{We work with
@ul*{@~ The crew at @a[href: "http://untyped.com"]{Untyped} @ul*{@~ The crew at @a[href: "http://untyped.com"]{Untyped}