Initial version of site almost ready.

This commit is contained in:
Justin Hsu 2015-01-04 20:43:45 -08:00
parent f4ac1192f4
commit cc7021ac4e
17 changed files with 344 additions and 132 deletions

View File

@ -11,7 +11,7 @@
-- Modified : JH: Use just the bibtex parser -- Modified : JH: Use just the bibtex parser
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
module Text.CSL.Input.Bibtex module Bibtex
( (
bibEntries bibEntries
, resolveCrossRefs , resolveCrossRefs

View File

@ -17,7 +17,7 @@ import Control.Applicative
import Data.Binary (Binary (..)) import Data.Binary (Binary (..))
import Data.Typeable (Typeable) import Data.Typeable (Typeable)
import Hakyll import Hakyll
import qualified Text.CSL.Input.Bibtex as B import qualified Bibtex as B
import qualified Text.Pandoc as Pandoc import qualified Text.Pandoc as Pandoc
import qualified Text.Parsec as Parsec import qualified Text.Parsec as Parsec

View File

@ -397,7 +397,8 @@
@STRING{vmcai13 = vmcai # ", Rome, Italy" } @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{csf08 = csf # ", Pittsburgh, Pennsylvania" }
@STRING{csf13 = csf # ", New Orleans, Louisiana" } @STRING{csf13 = csf # ", New Orleans, Louisiana" }
@STRING{csf14 = csf # ", Vienna, Austria" } @STRING{csf14 = csf # ", Vienna, Austria" }

View File

@ -471,7 +471,7 @@
url = {http://arxiv.org/abs/0803.0032} url = {http://arxiv.org/abs/0803.0032}
} }
@inproceedings{HGH+13, @inproceedings{HGH+14,
author = {Justin Hsu and author = {Justin Hsu and
Marco Gaboardi and Marco Gaboardi and
Andreas Haeberlen and Andreas Haeberlen and
@ -1518,7 +1518,6 @@ year = {2014}
year = {2014}, year = {2014},
url = {http://arxiv.org/abs/1402.1526}, url = {http://arxiv.org/abs/1402.1526},
jh = yes, jh = yes,
slides = yes,
poster = yes, poster = yes,
eprint = yes eprint = yes
} }

21
content/about.md Normal file
View File

@ -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.

7
content/biblio.md Normal file
View File

@ -0,0 +1,7 @@
## Drafts ##
\$draft\$
## Conference Publications ##
\$confs\$

View File

@ -1,3 +1,3 @@
# Contacts # {#contacts} ### Contacts ###
* Office: GRW 561 Office: GRW 561
* Email: justin@justinh.su Email: email@justinh.su

6
content/footer.md Normal file
View File

@ -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.

4
content/news.md Normal file
View File

@ -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!

View File

@ -1,99 +1,213 @@
@import "compass/css3"; @import "compass/css3";
@import "compass/css3/border-radius"; @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"; @import "compass/typography/vertical_rhythm";
$base-font-size: 16px; $base-font-size: 16px;
$base-line-height: 24px; $base-line-height: 24px;
$break-point: 45em;
$bg-color: #EEEEEE;
$main-color: #2196F3;
$acc-color: #C51162;
@include establish-baseline; @include establish-baseline;
.container { @mixin flexed {
@include display-flex; @include display-flex;
@include flex-direction(column);
@include flex-wrap(nowrap); @include flex-wrap(nowrap);
@include justify-content(flex-start);
@include align-items(center); @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 > * { .container > * {
width: 50%; width: $break-point;
padding: rhythm(0.5);
margin: rhythm(0.5); 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); padding: rhythm(0.5);
margin: rhythm(0.5);
} }
@media all and (max-width: 700px) { @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 { .topbox {
@include flex-direction(column); @include flex-direction(column);
background: yellow; @include align-items(stretch);
} }
.topbox > * { .bio-bar {
padding: rhythm(0.5); @include flex-direction(row);
margin: rhythm(0.5); @include order(1);
} }
} }
.picture { .picture {
@include flex(1 1 10em); @include flex(1 1);
background: green; padding: rhythm(0.5);
@include order(2);
} }
.contact { .contact {
@include flex(1 1 10em); @include flex(1 1);
background: red; padding: rhythm(0.5);
@include order(3);
h3 {
color: $main-color;
}
} }
@media all and (max-width: 700px) { // About cell ~ 2x sidebar in normal mode
.picture { .about {
@include order(3); @include flex(2 1);
} }
.contact { @media all and (max-width: $break-point) {
.about {
@include order(2); @include order(2);
} }
} }
#card { // Two section headers, different bg colors.
background: blue; #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;
}
} }

BIN
images/haskell-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
images/round.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@ -1,11 +1,33 @@
<div class="topbox"> <div class="topbox" id="card">
<div class="picture"> <div class="bio-bar">
picture <div class="picture">
<img src="images/round.png">
</div>
<div class="contact">
$contacts$
</div>
</div> </div>
<div class="contact"> <div class="about">
$contacts$ <div id="mini-header">
About Me
</div>
$about$
</div> </div>
</div> </div>
$content$ <div id="card">
<div id="mini-header-alt">
News
</div>
$news$
</div>
<div id="card">
<div id="mini-header">
Bibliography
</div>
$biblio$
</div>

72
site.hs
View File

@ -6,7 +6,24 @@ import Hakyll
import HakyllBibTex import HakyllBibTex
import System.Process import System.Process
import Text.Pandoc.Options 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 :: Compiler (Item String)
compass = compass =
getResourceString >>= getResourceString >>=
@ -21,23 +38,12 @@ b2bflags = [ "--expand"
, "-r" , "-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] bib2bib :: [String]
-> Compiler (Item String) -> Compiler (Item String)
bib2bib flags = (unsafeCompiler $ bib2bib flags = (unsafeCompiler $
readProcess "bib2bib" (bibSources ++ b2bflags ++ flags) "") readProcess "bib2bib" (bibSources ++ b2bflags ++ flags) "")
>>= makeItem >>= makeItem
bib2bibParse :: Item String bib2bibParse :: Item String
-> Compiler [Item BibEntry] -> Compiler [Item BibEntry]
@ -53,6 +59,10 @@ main = hakyll $ do
route idRoute route idRoute
compile copyFileCompiler compile copyFileCompiler
match "images/**" $ do
route idRoute
compile copyFileCompiler
match "css/*.scss" $ do match "css/*.scss" $ do
route $ setExtension "css" route $ setExtension "css"
compile $ compass compile $ compass
@ -61,14 +71,14 @@ main = hakyll $ do
create [fromCapture "bibs/*.html" nick] $ do create [fromCapture "bibs/*.html" nick] $ do
route idRoute route idRoute
compile $ compile $
let itemCtx = mconcat let itemCtx = mconcat
[ bibEntryContext [ bibEntryContext
, functionField "doclink" , functionField "doclink"
(\(i:_) _ -> return $ "files/docs/" ++ i ++ "paper.pdf") (\(i:_) _ -> return $ "files/docs/" ++ i ++ "paper.pdf")
, functionField "slidelink" , functionField "slidelink"
(\(i:_) _ -> return $ "files/slides/" ++ i ++ "slides.pdf") (\(i:_) _ -> return $ "files/slides/" ++ i ++ "slides.pdf")
, functionField "posterlink" , functionField "posterlink"
(\(i:_) _ -> return $ "files/poster/" ++ i ++ "poster.pdf") (\(i:_) _ -> return $ "files/posters/" ++ i ++ "poster.pdf")
] ]
biblioCtx = mconcat biblioCtx = mconcat
[ field "bibtitle" (\_ -> return $ title) [ field "bibtitle" (\_ -> return $ title)
@ -79,38 +89,40 @@ main = hakyll $ do
>>= bib2bibParse >>= bib2bibParse
>>= applyTemplateList bibTpl itemCtx >>= applyTemplateList bibTpl itemCtx
>>= makeItem >>= makeItem
>>= loadAndApplyTemplate >>= loadAndApplyTemplate "templates/biblisttpl.html" biblioCtx
"templates/biblisttpl.html" biblioCtx
>>= relativizeUrls >>= relativizeUrls
match "content/body.md" $ do match "content/biblio.md" $ do
route $ setExtension "html" route $ setExtension "html"
compile $ do compile $ do
let makeBibCtx (nick, _, _) = let makeBibCtx (nick, _, _) =
field nick (\_ -> loadBody $ fromFilePath ("bibs/" ++ nick ++ ".html")) field nick (\_ -> loadBody $ fromFilePath ("bibs/" ++ nick ++ ".html"))
secDiv = defaultHakyllWriterOptions { writerSectionDivs = True } secDiv = defaultHakyllWriterOptions { writerSectionDivs = True }
bodyCtx = mconcat $ map makeBibCtx bibHeaders in do biblioCtx = mconcat $ map makeBibCtx bibHeaders in do
pandocCompilerWith defaultHakyllReaderOptions secDiv pandocCompilerWith defaultHakyllReaderOptions secDiv
>>= applyAsTemplate bodyCtx >>= applyAsTemplate biblioCtx
>>= relativizeUrls >>= relativizeUrls
match "content/*.md" $ do match "content/*.md" $ do
route $ setExtension "html" route $ setExtension "html"
compile $ do compile $ do
pandocCompiler >>= relativizeUrls let secDiv = defaultHakyllWriterOptions { writerSectionDivs = True }
pandocCompilerWith defaultHakyllReaderOptions secDiv
>>= relativizeUrls
match "index.html" $ do match "index.html" $ do
route idRoute route idRoute
compile $ do compile $ do
contacts <- loadBody "content/contacts.md" let loadSec sec = field sec
content <- loadBody "content/body.md" (\_ -> loadBody (fromFilePath $ "content/" ++ sec ++ ".md"))
let indexContext = mconcat mainContext = mconcat $ fmap loadSec contentSections
[ field "contacts" $ \_ -> return contacts indexContext =
, field "content" $ \_ -> return content field "footer" (\_ -> loadBody "content/footer.md")
] `mappend`
defaultContext
getResourceBody getResourceBody
>>= applyAsTemplate indexContext >>= applyAsTemplate mainContext
>>= loadAndApplyTemplate "templates/main.html" defaultContext >>= loadAndApplyTemplate "templates/main.html" indexContext
>>= relativizeUrls >>= relativizeUrls
match "templates/*" $ compile templateCompiler match "templates/*" $ compile templateCompiler

View File

@ -1,21 +1,27 @@
<li> <tr>
<!-- $identifier$ --> <!-- $identifier$ -->
$title$ </br> <td id="bibcell"> <b> $year$ </b> </td>
$author$ </br> <td id="bibcell">
$if(eprint)$ <div id="titlecell"> <b> $title$ </b> </div>
[<a href="$eprint$">Arxiv</a>] $author$. </br>
$endif$ $if(booktitle)$
$if(docs)$ In $booktitle$.</br>
[<a href="$doclink(identifier)$">Paper</a>] $endif$
$endif$ $if(eprint)$
$if(slides)$ [<a href="$url$">ArXiV</a>]
[<a href="$slidelink(identifier)$">Slides</a>] $endif$
$endif$ $if(docs)$
$if(poster)$ [<a href="$doclink(identifier)$">Paper</a>]
[<a href="$posterlink(identifier)$">Poster</a>] $endif$
$endif$ $if(slides)$
<br> [<a href="$slidelink(identifier)$">Slides</a>]
$if(notes)$ $endif$
$notes$ <br> $if(poster)$
$endif$ [<a href="$posterlink(identifier)$">Poster</a>]
</li> $endif$
<br>
$if(notes)$
$notes$ <br>
$endif$
</td>
</tr>

View File

@ -1,4 +1,3 @@
<h2> $bibtitle$ </h2> <table>
<ul>
$bibitems$ $bibitems$
</ul> </table>

View File

@ -1,18 +1,39 @@
<meta charset=utf-8> <meta charset=utf-8>
<html> <html>
<head> <head>
<title> My Site </title> <title> Justin Hsu </title>
<link rel="stylesheet" type="text/css" href="css/style.css"> <link rel="stylesheet" type="text/css" href="css/style.css">
<link href='http://fonts.googleapis.com/css?family=Roboto:500,300,300italic'
rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Inconsolata' rel='stylesheet'
type='text/css'>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-33267683-1', 'auto');
ga('send', 'pageview');
</script>
</head> </head>
<body> <body>
<div class="container"> <div class="container" id="flexed">
<div class="header"> <div class="header">
<h1> Justin Hsu </h1> <h1> Justin Hsu </h1>
</div> </div>
$body$ $body$
</div>
</div>
<footer>
<small>
$footer$
</small>
</footer>
</body> </body>
</html> </html>