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"
|
#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")
|
||||||
|
|
||||||
|
|
|
@ -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}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user