diff --git a/Text/CSL/Input/Bibtex.hs b/Bibtex.hs similarity index 99% rename from Text/CSL/Input/Bibtex.hs rename to Bibtex.hs index 9ccd73d..c64c77b 100644 --- a/Text/CSL/Input/Bibtex.hs +++ b/Bibtex.hs @@ -11,7 +11,7 @@ -- Modified : JH: Use just the bibtex parser ----------------------------------------------------------------------------- -module Text.CSL.Input.Bibtex +module Bibtex ( bibEntries , resolveCrossRefs diff --git a/HakyllBibTex.hs b/HakyllBibTex.hs index 4d442c0..79f2650 100644 --- a/HakyllBibTex.hs +++ b/HakyllBibTex.hs @@ -17,7 +17,7 @@ import Control.Applicative import Data.Binary (Binary (..)) import Data.Typeable (Typeable) import Hakyll -import qualified Text.CSL.Input.Bibtex as B +import qualified Bibtex as B import qualified Text.Pandoc as Pandoc import qualified Text.Parsec as Parsec diff --git a/bibs/header.bib b/bibs/header.bib index fedcdec..e012ef4 100644 --- a/bibs/header.bib +++ b/bibs/header.bib @@ -397,7 +397,8 @@ @STRING{vmcai13 = vmcai # ", Rome, Italy" } % ---- -@STRING{csf = "{IEEE} {C}omputer {S}ecurity {F}oundations {S}ymposium" } +@STRING{csf = "{IEEE} {C}omputer {S}ecurity {F}oundations {S}ymposium + ({CSF})" } @STRING{csf08 = csf # ", Pittsburgh, Pennsylvania" } @STRING{csf13 = csf # ", New Orleans, Louisiana" } @STRING{csf14 = csf # ", Vienna, Austria" } diff --git a/bibs/myrefs.bib b/bibs/myrefs.bib index 4902be1..234512e 100644 --- a/bibs/myrefs.bib +++ b/bibs/myrefs.bib @@ -471,7 +471,7 @@ url = {http://arxiv.org/abs/0803.0032} } -@inproceedings{HGH+13, +@inproceedings{HGH+14, author = {Justin Hsu and Marco Gaboardi and Andreas Haeberlen and @@ -1518,7 +1518,6 @@ year = {2014} year = {2014}, url = {http://arxiv.org/abs/1402.1526}, jh = yes, - slides = yes, poster = yes, eprint = yes } diff --git a/content/about.md b/content/about.md new file mode 100644 index 0000000..3093ef9 --- /dev/null +++ b/content/about.md @@ -0,0 +1,21 @@ +I am a graduate student in the [Department of Computer +Science](http://cis.upenn.edu) at the [University of +Pennsylvania](http://upenn.edu). +There, I am associated with the [Theory Group](http://theory.cis.upenn.edu), the +[PL Club], and the [Privacy Group](http://privacy.cis.upenn.edu). +I am very fortunate to be co-advised by [Benjamin +Pierce](http://cis.upenn.edu/~bcpierce) and [Aaron +Roth](http://cis.upenn.edu/~aaroth). + +## Research Interests ## +I spend my time thinking about questions in **verification**, **programming +languages**, and **algorithms**. My work has mostly centered on [differential +privacy](http://en.wikipedia.org/wiki/Differential_privacy), a rigorous +definition of privacy that is currently under extensive study. + +From the verification side, I am interested in using formal methods---such as +[type systems](http://en.wikipedia.org/wiki/Type_system) and [program +logics](http://en.wikipedia.org/wiki/Hoare_logic))---to verify that programs are +differentially private. From the algorithms side, I am interested in +applications of differential privacy to optimization, machine learning, and +mechanism design. diff --git a/content/biblio.md b/content/biblio.md new file mode 100644 index 0000000..9ff34e6 --- /dev/null +++ b/content/biblio.md @@ -0,0 +1,7 @@ +## Drafts ## + +\$draft\$ + +## Conference Publications ## + +\$confs\$ diff --git a/content/contacts.md b/content/contacts.md index fbe7960..5af4fc4 100644 --- a/content/contacts.md +++ b/content/contacts.md @@ -1,3 +1,3 @@ -# Contacts # {#contacts} -* Office: GRW 561 -* Email: justin@justinh.su +### Contacts ### +Office: GRW 561 +Email: email@justinh.su diff --git a/content/footer.md b/content/footer.md new file mode 100644 index 0000000..25dfe81 --- /dev/null +++ b/content/footer.md @@ -0,0 +1,6 @@ +[Source](http://git.justinh.su/justin/justin-site/tree/master/). +Powered by +[Hakyll](http://jaspervdj.be/hakyll/), +[Pandoc](http://johnmacfarlane.net/pandoc/), +and [bibtex2html](https://www.lri.fr/~filliatr/bibtex2html/). +© Justin Hsu, 2015. diff --git a/content/news.md b/content/news.md new file mode 100644 index 0000000..31cd777 --- /dev/null +++ b/content/news.md @@ -0,0 +1,4 @@ ++ **11/2014** Our paper **Jointly private convex programming** has been uploaded to + `arxiv`. ++ **9/2014** Our paper, **Higher-order refinement types for mechanism design and + differential privacy**, has been accepted to POPL 2015! diff --git a/css/style.scss b/css/style.scss index 10af187..75b640f 100644 --- a/css/style.scss +++ b/css/style.scss @@ -1,99 +1,213 @@ @import "compass/css3"; @import "compass/css3/border-radius"; +@import "compass/css3/box-shadow"; +@import "compass/typography/links/link-colors"; +@import "compass/typography/links/unstyled-link"; +@import "compass/typography/links/hover-link"; @import "compass/typography/vertical_rhythm"; $base-font-size: 16px; $base-line-height: 24px; +$break-point: 45em; +$bg-color: #EEEEEE; +$main-color: #2196F3; +$acc-color: #C51162; @include establish-baseline; -.container { +@mixin flexed { @include display-flex; - @include flex-direction(column); @include flex-wrap(nowrap); - @include justify-content(flex-start); @include align-items(center); } +body { + margin: 0; + background: $bg-color; + a { + @include hover-link; + @include link-colors($acc-color); + } +} + +// Default table style sets the wrong font weight +// if we set this in body. +* { + font-family: 'roboto', sans-serif; + font-weight: 300; +} + +.container { + @include flexed; + @include flex-direction(column); + @include justify-content(flex-start); + + h1 { + @include adjust-font-size-to(3em, 1/2); + } + + h2 { + @include adjust-font-size-to(2em, 1/2); + } + + h3 { + @include adjust-font-size-to(1.5em, 1/2); + } + + p { + @include adjust-font-size-to(1em); + } +} + .container > * { - width: 50%; - padding: rhythm(0.5); + width: $break-point; margin: rhythm(0.5); -} - -.container h1 { - @include adjust-font-size-to(3em); -} - -.container h2 { - @include adjust-font-size-to(2em); -} - -.container p { - @include adjust-font-size-to(1em); -} - -.header { - background: purple; - @include border-radius(5px, 5px); - // @include border-radius(10px 25px, 15px 30px); - // @include border-radius(1px 3px 5px 7px, 2px 4px 6px 8px); -} - -.header h1 { - @include adjust-font-size-to(5em); -} - -.topbox { - @include display-flex; - @include flex-direction(row); - @include flex-wrap(nowrap); - @include justify-content(space-around); - @include align-items(stretch); - background: blue; - - max-height: 30em; -} - -.topbox > * { padding: rhythm(0.5); - margin: rhythm(0.5); } @media all and (max-width: 700px) { + .container > * { + width: 100%; + } +} + +// Top banner. +.header { + @include single-box-shadow(0, 10px, 5px, -10px); + background: $main-color; + + h1 { + @include adjust-font-size-to(5em,1/2); + color: white; + } +} + +// The top box. About, picture, and contact. +.topbox { + @include flexed; + @include flex-direction(row); + @include justify-content(space-around); + background: white; +} + +.topbar > * { + max-width: 100%; + h1 h2 { + color: $main-color; + } +} + +// Bar containing picture and contact info. +.bio-bar { + @include flexed; + @include flex-direction(column); + @include justify-content(space-around); + @include flex(1 1); + @include order(2); +} + +@media all and (max-width: $break-point) { .topbox { - @include flex-direction(column); - background: yellow; + @include flex-direction(column); + @include align-items(stretch); } - .topbox > * { - padding: rhythm(0.5); - margin: rhythm(0.5); + .bio-bar { + @include flex-direction(row); + @include order(1); } } .picture { - @include flex(1 1 10em); - background: green; - @include order(2); + @include flex(1 1); + padding: rhythm(0.5); } .contact { - @include flex(1 1 10em); - background: red; - @include order(3); + @include flex(1 1); + padding: rhythm(0.5); + + h3 { + color: $main-color; + } } -@media all and (max-width: 700px) { - .picture { - @include order(3); - } +// About cell ~ 2x sidebar in normal mode +.about { + @include flex(2 1); +} - .contact { +@media all and (max-width: $break-point) { + .about { @include order(2); } } -#card { - background: blue; +// Two section headers, different bg colors. +#mini-header { + background: $main-color; + color: white; + @include adjust-font-size-to(3em,1/2); + padding: rhythm(0.5); +} + +#mini-header-alt { + background: $acc-color; + color: white; + @include adjust-font-size-to(3em,1/2); + padding: rhythm(0.5); +} + +// Main unit for sections. +#card { + padding: rhythm(0.5); + @include single-box-shadow(0, 11px, 5px, -10px); + background: white; + h1 { + background: $main-color; + color: white; + }; + + h2 { + background: white; + color: $main-color; + }; + + b, strong { + font-family: 'Roboto', sans-serif; + font-weight: 500; + }; + + em { + font-family: 'Roboto', sans-serif; + font-weight: 300; + font-style: italic; + }; + + code { + font-family: 'Inconsolata', monospace; + font-weight: 500; + } +} + +#bibcell { + vertical-align: top; + padding: rhythm(1/2); +} + +// Latex parsed as {H} turns into spans, make these bold. +#titlecell span { + font-family: 'Roboto', sans-serif; + font-weight: 500; +} + +footer * { + text-align: center; + background: $main-color; + margin: 0; + a { + // Turn off colors. Using both colors together looks bad. + @include unstyled-link; + @include hover-link; + } } diff --git a/images/haskell-logo.png b/images/haskell-logo.png new file mode 100644 index 0000000..97c0937 Binary files /dev/null and b/images/haskell-logo.png differ diff --git a/images/round.png b/images/round.png new file mode 100644 index 0000000..7f04760 Binary files /dev/null and b/images/round.png differ diff --git a/index.html b/index.html index 36c3ad9..00cf7b7 100644 --- a/index.html +++ b/index.html @@ -1,11 +1,33 @@ -
-
- picture +
+
+
+ +
+ +
+ $contacts$ +
-
- $contacts$ +
+
+ About Me +
+ + $about$
-$content$ +
+
+ News +
+ $news$ +
+ +
+
+ Bibliography +
+ $biblio$ +
diff --git a/site.hs b/site.hs index 8e8a800..a429b52 100644 --- a/site.hs +++ b/site.hs @@ -6,7 +6,24 @@ import Hakyll import HakyllBibTex import System.Process import Text.Pandoc.Options +import Text.Regex +-------------------------------------------------------------------------------- +bibHeaders :: [(String, String, [String])] +bibHeaders = [ ("confs", "Conference Publications", + ["-c", "$type='INPROCEEDINGS'" ] ) + , ("draft", "Drafts" , + [ "-c", "$type='UNPUBLISHED'" ] ) + ] + +bibSources :: [String] +bibSources = [ "bibs/header.bib" + , "bibs/myrefs.bib" + ] + +contentSections :: [String] +contentSections = [ "contacts", "about", "news", "biblio" ] +-------------------------------------------------------------------------------- compass :: Compiler (Item String) compass = getResourceString >>= @@ -21,23 +38,12 @@ b2bflags = [ "--expand" , "-r" ] -bibHeaders :: [(String, String, [String])] -bibHeaders = [ ("confs", "Conference Publications", - ["-c", "$type='INPROCEEDINGS'" ] ) - , ("draft", "Drafts" , - [ "-c", "$type='UNPUBLISHED'" ] ) - ] - -bibSources :: [String] -bibSources = [ "bibs/header.bib" - , "bibs/myrefs.bib" - ] bib2bib :: [String] -> Compiler (Item String) bib2bib flags = (unsafeCompiler $ readProcess "bib2bib" (bibSources ++ b2bflags ++ flags) "") - >>= makeItem + >>= makeItem bib2bibParse :: Item String -> Compiler [Item BibEntry] @@ -53,6 +59,10 @@ main = hakyll $ do route idRoute compile copyFileCompiler + match "images/**" $ do + route idRoute + compile copyFileCompiler + match "css/*.scss" $ do route $ setExtension "css" compile $ compass @@ -61,14 +71,14 @@ main = hakyll $ do create [fromCapture "bibs/*.html" nick] $ do route idRoute compile $ - let itemCtx = mconcat + let itemCtx = mconcat [ bibEntryContext , functionField "doclink" (\(i:_) _ -> return $ "files/docs/" ++ i ++ "paper.pdf") , functionField "slidelink" (\(i:_) _ -> return $ "files/slides/" ++ i ++ "slides.pdf") , functionField "posterlink" - (\(i:_) _ -> return $ "files/poster/" ++ i ++ "poster.pdf") + (\(i:_) _ -> return $ "files/posters/" ++ i ++ "poster.pdf") ] biblioCtx = mconcat [ field "bibtitle" (\_ -> return $ title) @@ -79,38 +89,40 @@ main = hakyll $ do >>= bib2bibParse >>= applyTemplateList bibTpl itemCtx >>= makeItem - >>= loadAndApplyTemplate - "templates/biblisttpl.html" biblioCtx + >>= loadAndApplyTemplate "templates/biblisttpl.html" biblioCtx >>= relativizeUrls - match "content/body.md" $ do + match "content/biblio.md" $ do route $ setExtension "html" compile $ do let makeBibCtx (nick, _, _) = field nick (\_ -> loadBody $ fromFilePath ("bibs/" ++ nick ++ ".html")) - secDiv = defaultHakyllWriterOptions { writerSectionDivs = True } - bodyCtx = mconcat $ map makeBibCtx bibHeaders in do + secDiv = defaultHakyllWriterOptions { writerSectionDivs = True } + biblioCtx = mconcat $ map makeBibCtx bibHeaders in do pandocCompilerWith defaultHakyllReaderOptions secDiv - >>= applyAsTemplate bodyCtx + >>= applyAsTemplate biblioCtx >>= relativizeUrls match "content/*.md" $ do route $ setExtension "html" compile $ do - pandocCompiler >>= relativizeUrls + let secDiv = defaultHakyllWriterOptions { writerSectionDivs = True } + pandocCompilerWith defaultHakyllReaderOptions secDiv + >>= relativizeUrls match "index.html" $ do route idRoute compile $ do - contacts <- loadBody "content/contacts.md" - content <- loadBody "content/body.md" - let indexContext = mconcat - [ field "contacts" $ \_ -> return contacts - , field "content" $ \_ -> return content - ] + let loadSec sec = field sec + (\_ -> loadBody (fromFilePath $ "content/" ++ sec ++ ".md")) + mainContext = mconcat $ fmap loadSec contentSections + indexContext = + field "footer" (\_ -> loadBody "content/footer.md") + `mappend` + defaultContext getResourceBody - >>= applyAsTemplate indexContext - >>= loadAndApplyTemplate "templates/main.html" defaultContext - >>= relativizeUrls + >>= applyAsTemplate mainContext + >>= loadAndApplyTemplate "templates/main.html" indexContext + >>= relativizeUrls match "templates/*" $ compile templateCompiler diff --git a/templates/bibitemtpl.html b/templates/bibitemtpl.html index 6385bf9..bedcc55 100644 --- a/templates/bibitemtpl.html +++ b/templates/bibitemtpl.html @@ -1,21 +1,27 @@ -
  • - -$title$
    -$author$
    -$if(eprint)$ -[Arxiv] -$endif$ -$if(docs)$ -[Paper] -$endif$ -$if(slides)$ -[Slides] -$endif$ -$if(poster)$ -[Poster] -$endif$ -
    -$if(notes)$ -$notes$
    -$endif$ -
  • + + + $year$ + +
    $title$
    + $author$.
    + $if(booktitle)$ + In $booktitle$.
    + $endif$ + $if(eprint)$ + [ArXiV] + $endif$ + $if(docs)$ + [Paper] + $endif$ + $if(slides)$ + [Slides] + $endif$ + $if(poster)$ + [Poster] + $endif$ +
    + $if(notes)$ + $notes$
    + $endif$ + + diff --git a/templates/biblisttpl.html b/templates/biblisttpl.html index 273328e..ca842bd 100644 --- a/templates/biblisttpl.html +++ b/templates/biblisttpl.html @@ -1,4 +1,3 @@ -

    $bibtitle$

    -
      + $bibitems$ - +
      diff --git a/templates/main.html b/templates/main.html index 124c576..8fade03 100644 --- a/templates/main.html +++ b/templates/main.html @@ -1,18 +1,39 @@ - My Site + Justin Hsu + + + + + -
      +

      Justin Hsu

      $body$ -
      +
      +