]> Dogcows Code - chaz/talk-event-driven-programming-in-perl/commitdiff
initial commit
authorCharles McGarvey <cmcgarvey@bluehost.com>
Thu, 14 Jun 2018 03:52:46 +0000 (21:52 -0600)
committerCharles McGarvey <cmcgarvey@bluehost.com>
Fri, 15 Jun 2018 02:25:36 +0000 (20:25 -0600)
.gitignore [new file with mode: 0644]
Makefile [new file with mode: 0644]
README.md [new file with mode: 0644]
abstract.txt [new file with mode: 0644]
css/common.css [new file with mode: 0644]
css/slides.css [new file with mode: 0644]
img/bluehost.png [new file with mode: 0644]
js/common.js [new file with mode: 0644]
js/slides.js [new file with mode: 0644]
notes.txt [new file with mode: 0644]
slides.html [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..5429412
--- /dev/null
@@ -0,0 +1,2 @@
+/remark.min.js
+/slides-offline.html
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
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 <!-- This file is auto-generated - DO NOT EDIT!!! -->' \
+           -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 (file)
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 (file)
index 0000000..f106536
--- /dev/null
@@ -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 (file)
index 0000000..5fe4e74
--- /dev/null
@@ -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 (file)
index 0000000..04d938b
--- /dev/null
@@ -0,0 +1,5 @@
+
+#slide-bluehost img {
+    width: 250px;
+}
+
diff --git a/img/bluehost.png b/img/bluehost.png
new file mode 100644 (file)
index 0000000..3a83180
Binary files /dev/null and b/img/bluehost.png differ
diff --git a/js/common.js b/js/common.js
new file mode 100644 (file)
index 0000000..3832adb
--- /dev/null
@@ -0,0 +1,55 @@
+
+/*
+ * Create a shortcut on a number key to jump to a named slide.
+ *
+ * Using the hotkey on the target slide will go "back" to the slide that was active before jumping
+ * to the target slide.
+ *
+ * Example: Jump to the slide named "myslide" when the "1" key is pressed.
+ *   createHotkey(1, 'myslide');
+ */
+function createHotkey(key, slideName) {
+    var targetSlide = slideshow.getSlideByName(slideName);
+    var lastSlide   = -1;
+    document.addEventListener('keydown', function(e) {
+        if (e.which === key + 48) {
+            var currentNum  = slideshow.getCurrentSlideIndex() + 1;
+            var targetNum   = targetSlide.getSlideIndex() + 1;
+            if (currentNum !== targetNum) {
+                lastSlide = currentNum;
+                slideshow.gotoSlide(targetNum);
+            }
+            else {
+                slideshow.gotoSlide(lastSlide);
+            }
+        }
+    });
+};
+
+/*
+ * Set a hotkey "u" to navigate backwards in time.
+ *
+ * If you get on the wrong slide, this might be the easiest way to get back on track. This is what
+ * you might expect the browser's "Back" button to do if it worked.
+ */
+(function() {
+    var history = [];
+    var skip    = false;
+    slideshow.on('hideSlide', function(slide) {
+        if (skip) {
+            skip = false;
+            return;
+        }
+        history.push(slide.getSlideIndex() + 1);
+    });
+    document.addEventListener('keydown', function(e) {
+        if (e.which === 85 /* [u]ndo */) {
+            var lastNum = history.pop();
+            if (lastNum) {
+                skip = true;
+                slideshow.gotoSlide(lastNum);
+            }
+        }
+    });
+})();
+
diff --git a/js/slides.js b/js/slides.js
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/notes.txt b/notes.txt
new file mode 100644 (file)
index 0000000..6841507
--- /dev/null
+++ b/notes.txt
@@ -0,0 +1,40 @@
+
+Topics:
+
+Evolution of event-driven programming:
+- Wait for a key press or line of text.
+- Interrupts (hardware and software).
+- Modern event loops
+
+How to write a modern event-loop.
+- kernel facilities (poll, select, etc.)
+
+Event-drive programming in Perl
+- POE
+- AnyEvent
+- IO::Async
+
+List of already-built event loops.
+- EV
+- Glib
+
+Types of events in modern applications:
+- Data available
+- Timer
+- User input
+- Signal
+- Anything that can spontaneously happen in the real world.
+
+Exceptions in event-driven code.
+
+Promises:
+- Future
+- Future::AsyncAwait
+- Future::Utils
+
+Real-world uses for event-driven applications:
+- Webhooks
+- WebSockets
+- PubsubHubbub
+- msg queue
+
diff --git a/slides.html b/slides.html
new file mode 100644 (file)
index 0000000..46dbe40
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html><head><meta charset="utf-8"><title>Event-driven Programming in Perl</title><link rel="stylesheet" href="css/common.css"><link rel="stylesheet" href="css/slides.css"></head><body><textarea id="source">
+
+class:  center, middle
+name:   title
+
+# Event-driven Programming in Perl
+
+Charles McGarvey
+
+???
+- Hi. I'm Charles McGarvey.
+- Been a Perl programmer for a long time...
+
+---
+class:  center, middle
+name:   bluehost
+
+![Bluehost](img/bluehost.png)
+
+### https://bluehost.com/jobs
+
+???
+- My employer is hiring.
+- It's a pretty cool employer...
+
+---
+class: center, middle
+name:  conclusion
+
+## Conclusion:
+
+### Perl is fun.
+
+---
+class: center, middle
+name:  last
+
+### Thanks.
+
+</textarea><script src="https://gnab.github.io/remark/downloads/remark-latest.min.js"></script><script>var slideshow = remark.create({countIncrementalSlides: true, highlightLanguage: '', highlightLines: true, ratio: '16:9', /*slideNumberFormat: '',*/ navigation: {scroll: false, touch: false, click: false}})</script><script src="js/common.js"></script><script src="js/slides.js"></script></body></html>
+<!-- vim: set ts=4 sts=4 sw=4 tw=120 et ft=markdown nowrap: -->
This page took 0.039313 seconds and 4 git commands to generate.