From 7040bda8e2a0f1d9bb072f484f52a6148061777f Mon Sep 17 00:00:00 2001 From: Charles McGarvey Date: Wed, 13 Jun 2018 21:52:46 -0600 Subject: [PATCH 1/1] initial commit --- .gitignore | 2 + Makefile | 38 +++++++++++++++++++ README.md | 18 +++++++++ abstract.txt | 22 +++++++++++ css/common.css | 93 +++++++++++++++++++++++++++++++++++++++++++++++ css/slides.css | 5 +++ img/bluehost.png | Bin 0 -> 3250 bytes js/common.js | 55 ++++++++++++++++++++++++++++ js/slides.js | 0 notes.txt | 40 ++++++++++++++++++++ slides.html | 42 +++++++++++++++++++++ 11 files changed, 315 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README.md create mode 100644 abstract.txt create mode 100644 css/common.css create mode 100644 css/slides.css create mode 100644 img/bluehost.png create mode 100644 js/common.js create mode 100644 js/slides.js create mode 100644 notes.txt create mode 100644 slides.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5429412 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/remark.min.js +/slides-offline.html diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..272b370 --- /dev/null +++ b/Makefile @@ -0,0 +1,38 @@ + +SLIDES = event-driven-programming-in-perl +BROWSER = google-chrome +DOT = dot + +dotfiles = $(shell find . -iname '*.dot') +svgfiles = $(patsubst %.dot,%.svg,$(dotfiles)) + +all: offline + +clean: + rm -f slides-offline.html remark.min.js $(SLIDES).pdf $(svgfiles) + +offline: slides-offline.html remark.min.js $(svgfiles) + +pdf: $(SLIDES).pdf + +run: $(svgfiles) + $(BROWSER) slides.html + +run-offline: offline + $(BROWSER) slides-offline.html + +%.svg: %.dot + $(DOT) -Tsvg -o$@ $< + +$(SLIDES).pdf: slides.html $(wildcard css/*) $(wildcard img/*) $(svgfiles) + docker run --rm -v `pwd`:/pwd astefanutti/decktape /pwd/slides.html /pwd/$(SLIDES).pdf + +slides-offline.html: slides.html + sed -e '1 a ' \ + -e 's!https://.*remark-latest\.min\.js!remark.min.js!' <$< >$@ + +remark.min.js: + curl -Lo $@ https://gnab.github.io/remark/downloads/remark-latest.min.js + +.PHONY: all clean offline pdf run run-offline + diff --git a/README.md b/README.md new file mode 100644 index 0000000..9b56498 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ + +# Slides for "Event-driven Programming in Perl" + +This directory contains the slides for my talk entitled "Event-driven Programming in Perl". + +The slides were written in [Markdown](https://daringfireball.net/projects/markdown/) format and can be rendered with +[remark](http://remarkjs.com/). + +## Options + +To view the slides: + + make run + +To build a PDF version of the slides: + + make pdf + diff --git a/abstract.txt b/abstract.txt new file mode 100644 index 0000000..f106536 --- /dev/null +++ b/abstract.txt @@ -0,0 +1,22 @@ +Event-driven programming in Perl +Charles McGarvey | Mon, 6/18 at 2:00 pm | 50 minutes | Ballroom B + +Event-driven programming is a paradigm where programmers creates subroutines +that get called when events occur. Events can be just about anything: timers +expiring, new data becoming available to read from a socket, even humans +clicking on things in an interactive program. + +Event-driven programming definitely isn't anything new, but there have been +some interesting developments over the past ten years. Event-driven frameworks +and applications have risen in popularity and are replacing systems built +using outdated techniques. New methods and language features have been created +to make event-driven programming nicer. + +In this talk we’ll go over: + + - the language features in Perl that make event-driven programming happen, + - some CPAN modules that offer the extra functionality you need. + +This talk is somewhat geared toward beginners (either to Perl or to +event-driven programming), but it may also be interesting to anyone wondering +about the current state of event-driven programming in Perl. diff --git a/css/common.css b/css/common.css new file mode 100644 index 0000000..5fe4e74 --- /dev/null +++ b/css/common.css @@ -0,0 +1,93 @@ +@import url(https://fonts.googleapis.com/css?family=Open+Sans); +@import url(https://fonts.googleapis.com/css?family=Muli); +@import url(https://fonts.googleapis.com/css?family=Inconsolata); + +.remark-slide-content { + font-family: 'Open Sans'; + font-size: 22px; +} + +.remark-slide-content h1, +.remark-slide-content h2, +.remark-slide-content h3 { + font-family: Muli; + font-weight: bold; +} +.remark-slide-content h2 { + font-size: 40px; +} +.remark-slide-content h3 { + font-size: 30px; +} + +.remark-slide-content li { + line-height: 2em; +} +.remark-slide-content .condensed li { + line-height: 1em; +} + +.remark-code, .remark-inline-code { + font-family: Inconsolata, monospace; +} +.remark-code { + border-radius: 5px; + border: 1px solid #ccc; +} + +.remark-slide-content blockquote { + border-radius: 5px; + border: 1px solid #ccc; + background: #f0f0f0; + margin: 1.5em 0; + padding: 1em; + quotes: "\201C""\201D""\2018""\2019"; + position: relative; +} +.remark-slide-content blockquote:before { + color: #ccc; + position: absolute; + content: open-quote; + font-size: 6em; + line-height: 0.1em; + margin-right: 0.25em; + vertical-align: -0.4em; +} + +.remark-slide-content .col { + box-sizing: border-box; + display: block; + float: left; + border: 0; + margin: 0; + padding: 0; + width: 50%; +} +.remark-slide-content .col:nth-of-type(odd) { + padding: 0 1em 0 0; +} +.remark-slide-content .col:nth-of-type(even) { + padding: 0 0 0 1em; +} +.remark-slide-content .col.sep:nth-of-type(odd) { + border-right: 1px solid #ccc; +} +.remark-slide-content .col.sep:nth-of-type(even) { + border-left: 1px solid #ccc; +} + +/* fix non-collapsing margin */ +.remark-slide-content .marginfix h3, +.remark-slide-content .marginfix ul { + margin-top: 0; +} + +.remark-slide-content .top-right { + float: right; + margin: 50px 0 0 2em; +} + +.remark-slide-content .highlight { + color: #7d9726; +} + diff --git a/css/slides.css b/css/slides.css new file mode 100644 index 0000000..04d938b --- /dev/null +++ b/css/slides.css @@ -0,0 +1,5 @@ + +#slide-bluehost img { + width: 250px; +} + diff --git a/img/bluehost.png b/img/bluehost.png new file mode 100644 index 0000000000000000000000000000000000000000..3a831807c89ef9c07dd5510b9a6197a83cd30127 GIT binary patch literal 3250 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 +Event-driven Programming in Perl + -- 2.45.2