Move things around so there's a single place that specifies PLT people
and places.
This commit is contained in:
parent
ee138cf2cb
commit
53adab8271
|
@ -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")
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue
Block a user