From 3d080ecacfbe2b6db687c1393f1f7c55847ce0c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kaan=20Gen=C3=A7?= Date: Fri, 18 Sep 2020 00:03:34 -0400 Subject: [PATCH] Revised style & content --- .nojekyll | 0 build.boot | 33 +++++++------ content/extra/kaangenc.gpg | 94 +++++++++++++++++++++++++++++++++++++ content/img/game-cover.jpg | Bin 0 -> 18705 bytes content/img/profile.jpg | Bin 0 -> 15432 bytes content/index.markdown | 85 ++++++++++++++++++++++++++++----- src/site/core.clj | 27 +++++++---- src/site/styles.clj | 50 ++++++++++++++++++++ 8 files changed, 254 insertions(+), 35 deletions(-) create mode 100644 .nojekyll create mode 100644 content/extra/kaangenc.gpg create mode 100644 content/img/game-cover.jpg create mode 100644 content/img/profile.jpg create mode 100644 src/site/styles.clj diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/build.boot b/build.boot index 0ccf909..92bbfbd 100644 --- a/build.boot +++ b/build.boot @@ -2,28 +2,33 @@ :source-paths #{"src"} :resource-paths #{"content"} :dependencies '[[perun "0.4.3-SNAPSHOT" :scope "test"] - [deraen/boot-livereload "0.2.1" :scope "test"] [hiccup "1.0.5" :exclusions [org.clojure/clojure]] [garden "1.3.10"] + [org.martinklepsch/boot-garden "1.3.2-0"] [pandeiro/boot-http "0.8.3" :exclusions [org.clojure/clojure]]]) (require '[io.perun :as perun] - '[deraen.boot-livereload :refer [livereload]] '[pandeiro.boot-http :refer [serve]] + '[org.martinklepsch.boot-garden :refer [garden]] '[site.core]) -(deftask build-website [] - (comp (perun/markdown) +(deftask build [] + (comp (perun/pandoc) + (perun/highlight) + (sift :to-resource #{#"^img/(.*)"}) + (sift :move {#"^img/(.*)" "public/img/$1"}) + (sift :to-resource #{#"^extra/(.*)"}) + (sift :move {#"^extra/(.*)" "public/extra/$1"}) + (garden :styles-var 'site.styles/base :output-to "public/main.css") (perun/render :renderer 'site.core/page) - (perun/sitemap :filename "sitemap.xml"))) + (perun/sitemap :filename "sitemap.xml") + (sift :move {#"^public/(.*)" "$1"}))) -(deftask serve-website [] - (comp (livereload) - (build-website) - (serve :port 8000 :resource-root "public") -; (repl) - (wait))) +(deftask dev [] + (comp (watch) + (build) + (serve :port 8000 :resource-root "public"))) -(deftask compile-website [] - (comp (build-website) - (target))) +(deftask publish [] + (comp (build) + (target :dir #{"docs"}))) diff --git a/content/extra/kaangenc.gpg b/content/extra/kaangenc.gpg new file mode 100644 index 0000000..eb13458 --- /dev/null +++ b/content/extra/kaangenc.gpg @@ -0,0 +1,94 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +zuxCcj3Ubrs= +=IrBB +-----END PGP PUBLIC KEY BLOCK----- diff --git a/content/img/game-cover.jpg b/content/img/game-cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bce97a05601c6030cdfa5376babf9c14ee88ef1a GIT binary patch literal 18705 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 literal 0 HcmV?d00001 diff --git a/content/img/profile.jpg b/content/img/profile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10d26a5ecc57884a04314ab974b285b03b60ee98 GIT binary patch literal 15432 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 NGXd3R?EIhS{|7&|qFev~ literal 0 HcmV?d00001 diff --git a/content/index.markdown b/content/index.markdown index d2455cf..141d9dd 100644 --- a/content/index.markdown +++ b/content/index.markdown @@ -1,17 +1,80 @@ -# Kaan Genç +# Research Interests -## Research Interests +My research interests include programming languages, persistent memory (NVM), +dynamic program analysis, and data race detection. -* Programming languages -* Dynamic analysis -* Persistent memory -* Race detection +I am currently working on novel methods for providing efficient persistent +transactions with strong guarantees. Our work uses non-volatile memory, such as +Intel Optane Memory, combined with commodity hardware transactional memory to +allow programs to survive power interruptions and crashes, with minimal +performance and scalability impacts. -## Publications +# Publications -* Dependence Aware, Predictive Unbounded Predictive Race Detection, OOPSLA 2019. -* Vindicator, PLDI 2018. +
+## Crafty: Efficient, HTM-Compatible Persistent Transactions +
Kaan Genç, Michael D. Bond, and Guoqing Harry Xu
+
-## Teaching Experience +[Talk](https://www.youtube.com/watch?v=wdVLlQXV1to) [Paper](https://dl.acm.org/doi/10.1145/3385412.3385991) [Extended Paper](https://arxiv.org/pdf/2004.00262.pdf) [Implementation](https://github.com/PLaSSticity/Crafty) +
-Advanced C Programming, Autumn 2017 & Spring 2018 @ The Ohio State Univerity. + +
+## Dependence Aware, Predictive Unbounded Predictive Race Detection +
Kaan Genç, Jake Roemer, Yufan Xu, and Michael D. Bond
+
ACM SIGPLAN International Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA 2019), Athens, Greece, October 2019
+ +[Talk](https://www.youtube.com/watch?v=YgZWnc31tVQ) [Paper](https://dl.acm.org/doi/10.1145/3360605) [Extended Paper](https://arxiv.org/pdf/1904.13088.pdf) [Implementation](https://github.com/PLaSSticity/SDP-WDP-implementation) +
+ + +
+## SmartTrack: Efficient Predictive Race Detection +
Jake Roemer, Kaan Genç, and Michael D. Bond
+
ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2020), Online, June 2020
+ +[Paper](http://web.cse.ohio-state.edu/~bond.213/vindicator-pldi-2018.pdf) [Extended Paper](http://web.cse.ohio-state.edu/~bond.213/vindicator-pldi-2018-xtr.pdf) +
+ + +
+## High-Coverage, Unbounded Sound Predictive Race Detection +
Jake Roemer, Kaan Genç, and Michael D. Bond
+
ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2018), Philadelphia, PA, USA, June 2018
+ +[Paper](http://web.cse.ohio-state.edu/~bond.213/vindicator-pldi-2018.pdf) [Extended Paper](http://web.cse.ohio-state.edu/~bond.213/vindicator-pldi-2018-xtr.pdf) +
+
+ +# Teaching Experience + +During Autumn 2017 and Spring 2018 semesters, I had the opportunity to teach the +class [CSE +2451](http://coe-portal.cse.ohio-state.edu/pdf-exports/CSE/CSE-2451.pdf), +Advanced C Programming, at the Ohio State Univerity. The class had around 35 +students enrolled for both semesters. I was given the full responsibilities for +the class, including teaching the class, writing assignments and exams, grading, +and holding office hours. I revised the course material I was given, making it +more comprehensive and adding unique insights on building and optimizing +advanced C programs. + +The students were satisfied with my teaching, with my Student Evaluation of +Instruction mean scores being 4.6 and 4.4 out of 5 for both semesters, a score +above the university mean for classes of similar size. + +# Activities + +[OOPSLA 2020](https://2020.splashcon.org/track/splash-2020-Artifacts) Artifact Committee member + + + +
+# Other stuff + + +![A picture from a 3-D video game, showing a river flowing into the sea. The text "The Land Itself" is overlayed on the sea.](/img/game-cover.jpg)\ + + +On my free time, I develop small indie video games and release them open source. +
diff --git a/src/site/core.clj b/src/site/core.clj index 54ede9e..fd75248 100644 --- a/src/site/core.clj +++ b/src/site/core.clj @@ -2,17 +2,24 @@ (:require [hiccup.page :as hp] [garden.core :as gc])) -(def textcolor-main "rgba(0, 0, 0, 0.87)") - -(def css - (gc/css - [:body - {:max-width "600px" - :color textcolor-main}] - )) (defn page [data] (hp/html5 - [:head [:style css]] - [:div + [:head + [:meta {:charset "utf-8"}] + [:link {:rel "stylesheet" :href "main.css"}]] + [:link {:href + "https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,400;0,700;1,400;1,700&display=swap" + :rel "stylesheet"}] + (when (= "index" (-> data :entry :slug)) + [:div.sidebar.column + [:img.picture {:alt "A photo of Kaan Genç, after his OOPSLA 2019 talk." :src "/img/profile.jpg"}] + [:div.name "Kaan Genç"] + [:div.title "PhD Student"] + [:div.department "Computer Science & Engineering"] + [:div.affiliation "The Ohio State University"] + [:span [:a.email {:href "mailto:genc.5@osu.edu"} "genc.5@osu.edu"] [:a.gpg {:href "/extra/kaangenc.gpg"} "GPG key"]] + [:a.github {:href "https://github.com/SeriousBug"} "Github"] + [:a.researchr {:href "https://conf.researchr.org/profile/kaangenc"} "Researchr"]]) + [:div.main.column (-> data :entry :content)])) diff --git a/src/site/styles.clj b/src/site/styles.clj new file mode 100644 index 0000000..ead11b8 --- /dev/null +++ b/src/site/styles.clj @@ -0,0 +1,50 @@ +(ns site.styles + (:require [garden.def :refer [defrule defstyles]] + [garden.stylesheet :refer [rule]])) + +(def textcolor-main "rgba(0, 0, 0, 0.87)") + +(defstyles base + [:.main + {:max-width "600px"}] + [:h1 {:font-size "1.5em"}] + ["h1:not(:first-child)" {:margin-top "2em"}] + [:h2 {:font-size "1.3em"}] + [:h3 {:font-size "1.15em"}] + ["img, .img" {:border-radius "5px"}] + [:.sidebar + {:max-width "300px"} + [">a,span" {:display "block" :padding "10px 0"}] + [:.gpg {:font-size "0.8em" :margin-left "20px"}]] + [:.column + {:flex "auto" + :padding "20px"}] + [:.title {:margin-bottom "0.5em"}] + [:body + {:display "flex" + :flex-direction "row" + :flex-wrap "wrap" + :justify-content "center" + :color textcolor-main + :background-color "#ffead1" + :font-family "Ubuntu, sans-serif" + :font-size "16px" + :line-height 1.2}] + [:a {:text-decoration "none" :color "#ae3100"}] + ["a:link"] + ["a:visited" {:color "#681e00"}] + ["a:hover"] + ["a:active"] + + [:.other-stuff + {:margin-top "4em"} + [:img {:float "left" :max-width "250px" :margin-right "40px"}]] + + + [:.name {:padding "10px 0" :font-size "1.2em"}] + [:.publication [:p [:a {:padding "0 10px"}]]] + [:.publication [:div {:padding ".2em 10px .2em 30px"}]] + ;; Create a separator between publications with the border + [".publication:not(:last-child)" {:border-bottom "1px solid black"}] + ;; + [:.conf {:font-size "14px" :color "rgba(0, 0, 0, 0.70)"}])