├── accepted ├── .gitkeep ├── the-ast-and-me-pycascades.md ├── the-ast-and-me-devopsdaysyvr.md ├── what-to-expect-djangocon.md ├── the-ast-and-me-pycon.md └── what-to-expect-dinosaurjs.md ├── pending └── .gitkeep ├── rejected ├── .gitkeep └── the-ast-and-me-pygotham.md └── README.md /accepted/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pending/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rejected/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Conference Talk Proposals 2 | This is a place for me to keep track of talk proposals I have submitted to various conferences. 3 | 4 | The goal is to encourage transparency about what a talk proposal looks like and to encourage others to submit talks. Writing your first talk proposal can be daunting! Having examples helps. 5 | 6 | The outcome will be updated for all proposals. Any feedback received, links to videos, notes on other places a talk has been submitted, etc. will all be added. 7 | 8 | --- 9 | 10 | This repository is inspired by [Allison Kaptur's PyCon Proposals repository](https://github.com/akaptur/pycon-proposals). 11 | 12 | ## Other proposal examples on the web: 13 | * [Allison Kaptur](https://github.com/akaptur/pycon-proposals) 14 | * [Brandon Rhodes](http://rhodesmill.org/brandon/2013/example-pycon-proposals/) 15 | * [Julia Evans](https://github.com/jvns/talks/tree/master/proposals) 16 | -------------------------------------------------------------------------------- /accepted/the-ast-and-me-pycascades.md: -------------------------------------------------------------------------------- 1 | Title: 2 | ------ 3 | The AST and Me 4 | 5 | Conference: 6 | ----------- 7 | PyCascades 2018 8 | January 22-23, 2018 9 | Vancouver, B.C. 10 | 11 | Abstract/Elevator Pitch (max 300 characters): 12 | --------------------------------------------- 13 | Get under the hood and learn about Python's beloved Abstract Syntax Tree. We'll discuss the AST's role in Python's compilation process, how it affects Bytecode, and how you can use it's optimizations to improve your code's speed at runtime. Write better code! 14 | 15 | Talk Format: 16 | ------------ 17 | Talk - 25 minutes 18 | 19 | Audience Level: 20 | --------------- 21 | Intermediate 22 | 23 | Description: 24 | ------------ 25 | Python is a wonderfully accessible language for novice and veteran programmers alike. Understanding how Python works can be a key step in writing better code. 26 | 27 | Ever wonder how Python code is run? Overheard people arguing about whether Python is interpreted or compiled? In this talk, we will delve into the lifecycle of a piece of Python code in order to understand the role that Python's Abstract Syntax Tree plays in shaping the runtime of your code. Utilizing your newfound knowledge of AST optimizations, you will better understand how Python code is compiled in order to write better code. 28 | 29 | Outline: 30 | -------- 31 | * Intro (1 minute) 32 | - Quick introduction of me and my motivation for giving this talk 33 | * Why should you care about Python internals? (2 minutes) 34 | - Why a bit of knowledge about Python internals goes a long way - from code speedups to understanding tracebacks 35 | * A brief overview of compiling a piece of Python code - from source code through bytecode and execution, focusing on the role of the AST. 5,000-foot overview. (3 minutes) 36 | - Build an understanding of the broad steps it takes to compile a piece of Python code 37 | * Current optimizations built into the AST (and ones that could be) (3 minutes) 38 | - What does one gain from optimizing the AST? 39 | - How is the AST optimized? 40 | - Constant folding, dead code elimination, copy propagation. (Easy, quick descriptions of each) 41 | * Using the AST module to inspect a piece of code (4 minutes) (*This section will go through some trial and error when preparing and it may be best to simplify for brevity. Less code with better understanding is better, using `dis` may muddy the waters) 42 | - Code examples of: 43 | - Using the built-in AST module to inspect a few small piece of code 44 | - Using dis to inspect the bytecode from the example 45 | - Running the dissected code 46 | * How the AST affects your bytecode, and how your bytecode affects your runtime (5 minutes) 47 | - Spoiler alert: it creates those *.pyc and *.pyo files! And those contain bytecode. 48 | - Mention the difference between *.pyc files and *pyo files. 49 | * Motivating examples of ways to optimize your code to take advantage of AST and other compiler optimizations (5 minutes) 50 | - Ways to write code differently to generate the most optimized AST and, therefore, bytecode 51 | - Reasons to inspect the AST instead of bytecode (and why your bytecode still matters) 52 | * Conclusion/Next steps/Resources (2 minutes) 53 | - Mention Victor Stinner's FAT Python project and PEP 509-511 - super exciting things for the future of Python internals 54 | 55 | 56 | Notes: 57 | ------ 58 | * Please note: I plan on giving this talk locally at events, but this would be my first time speaking at a larger, regional conference and I would love a speaker mentor! 59 | 60 | Bio: 61 | ---- 62 | Emily Morehouse-Valcarcel is the Cofounder and Director of Engineering at Cuttlesoft, a custom software development company that loves Python, puns, and cuttlefish. After living in the humid Florida for most of her life, she's now in a love affair with the Colorado mountains. A graduate of the Florida State University, Emily holds bachelor's degrees in Computer Science, Criminology, and Theatre. -------------------------------------------------------------------------------- /accepted/the-ast-and-me-devopsdaysyvr.md: -------------------------------------------------------------------------------- 1 | Title: 2 | ------ 3 | The AST and Me 4 | 5 | Conference: 6 | ----------- 7 | DevOpsDays Vancouver 8 | April 20-21, 2018 9 | Vancouver, B.C. 10 | 11 | *Note:* I was invited to DevOpsDays after giving this talk at PyCascades 2018. 12 | 13 | Abstract/Elevator Pitch (max 300 characters): 14 | --------------------------------------------- 15 | Get under the hood and learn about Python's beloved Abstract Syntax Tree. We'll discuss the AST's role in Python's compilation process, how it affects Bytecode, and how you can use it's optimizations to improve your code's speed at runtime. Write better code! 16 | 17 | Talk Format: 18 | ------------ 19 | Talk - 25 minutes 20 | 21 | Audience Level: 22 | --------------- 23 | Intermediate 24 | 25 | Description: 26 | ------------ 27 | Python is a wonderfully accessible language for novice and veteran programmers alike. Understanding how Python works can be a key step in writing better code. 28 | 29 | Ever wonder how Python code is run? Overheard people arguing about whether Python is interpreted or compiled? In this talk, we will delve into the lifecycle of a piece of Python code in order to understand the role that Python's Abstract Syntax Tree plays in shaping the runtime of your code. Utilizing your newfound knowledge of AST optimizations, you will better understand how Python code is compiled in order to write better code. 30 | 31 | Outline: 32 | -------- 33 | * Intro (1 minute) 34 | - Quick introduction of me and my motivation for giving this talk 35 | * Why should you care about Python internals? (2 minutes) 36 | - Why a bit of knowledge about Python internals goes a long way - from code speedups to understanding tracebacks 37 | * A brief overview of compiling a piece of Python code - from source code through bytecode and execution, focusing on the role of the AST. 5,000-foot overview. (3 minutes) 38 | - Build an understanding of the broad steps it takes to compile a piece of Python code 39 | * Current optimizations built into the AST (and ones that could be) (3 minutes) 40 | - What does one gain from optimizing the AST? 41 | - How is the AST optimized? 42 | - Constant folding, dead code elimination, copy propagation. (Easy, quick descriptions of each) 43 | * Using the AST module to inspect a piece of code (4 minutes) (*This section will go through some trial and error when preparing and it may be best to simplify for brevity. Less code with better understanding is better, using `dis` may muddy the waters) 44 | - Code examples of: 45 | - Using the built-in AST module to inspect a few small piece of code 46 | - Using dis to inspect the bytecode from the example 47 | - Running the dissected code 48 | * How the AST affects your bytecode, and how your bytecode affects your runtime (5 minutes) 49 | - Spoiler alert: it creates those *.pyc and *.pyo files! And those contain bytecode. 50 | - Mention the difference between *.pyc files and *pyo files. 51 | * Motivating examples of ways to optimize your code to take advantage of AST and other compiler optimizations (5 minutes) 52 | - Ways to write code differently to generate the most optimized AST and, therefore, bytecode 53 | - Reasons to inspect the AST instead of bytecode (and why your bytecode still matters) 54 | * Conclusion/Next steps/Resources (2 minutes) 55 | - Mention Victor Stinner's FAT Python project and PEP 509-511 - super exciting things for the future of Python internals 56 | 57 | 58 | Notes: 59 | ------ 60 | * Please note: I plan on giving this talk locally at events, but this would be my first time speaking at a larger, regional conference and I would love a speaker mentor! 61 | 62 | Bio: 63 | ---- 64 | Emily Morehouse-Valcarcel is the Cofounder and Director of Engineering at Cuttlesoft, a custom software development company that loves Python, puns, and cuttlefish. After living in the humid Florida for most of her life, she's now in a love affair with the Colorado mountains. A graduate of the Florida State University, Emily holds bachelor's degrees in Computer Science, Criminology, and Theatre. -------------------------------------------------------------------------------- /rejected/the-ast-and-me-pygotham.md: -------------------------------------------------------------------------------- 1 | Title: 2 | ------ 3 | The AST and Me 4 | 5 | Conference: 6 | ----------- 7 | PyGotham 8 | October 5-6, 2018 9 | NYC 10 | 11 | Talk Format: 12 | ------------ 13 | Talk - 25 minutes 14 | 15 | Description: 16 | ------------ 17 | Get under the hood and learn about Python's beloved Abstract Syntax Tree. Ever wonder how Python code is run? Overheard people arguing about whether Python is interpreted or compiled? In this talk, we will delve into the lifecycle of a piece of Python code in order to understand the role that Python's Abstract Syntax Tree plays in shaping the runtime of your code. Utilizing your newfound knowledge of Python's AST, you'll get a taste of how you probably already rely on ASTs and how they can be used to build awesome tools. 18 | 19 | Who and Why (Audience): 20 | ----------------------- 21 | This talk can spark interest in people in many different ways, from a desire to understand how Python's internals work at a high level and how that can inform better code, to using an AST to lint code or build new tools (with Python or many other languages). Many talks have used Python's bytecode and code objects to delve into Python's internals, but you don't have to go that far! The AST is an excellent bridge to understand how your code works and the optimizations applied to your code at that level. 22 | 23 | I expect audience members to have a working knowledge of Python in order to understand the code that's being used (code for simple print statements, if/else statements, for loops and lambdas are dissected into their AST and bytecode, and audience members should not be caught up on what a lambda is, for example). It would be ideal for audience members to have an idea of how an interpreted language is structured and how compilers work, but I'll go through the highlights of crucial knowledge for this at the beginning of the talk. For these reasons, I would consider this talk to be geared toward "Intermediate" individuals. 24 | 25 | The audience should walk away with a better understanding of how Python and its compiler works, how to interact with and visualize their code in new ways, useful knowledge about Python's optimizations, and a variety of applications of using ASTs to build cool tools. 26 | 27 | Outline: 28 | -------- 29 | * INTRODUCTION AND OUTLINE (2 minutes, 2 total) 30 | - Quick introduction of myself 31 | - Outline of what will be covered and what you will learn 32 | - My motivation for giving this talk 33 | * WHY? (1 minute, 3 total) 34 | - Why should you care about Python internals? 35 | - Why a bit of knowledge about Python internals goes a long way 36 | * OVERVIEW (4 minutes, 7 total) 37 | - Is Python interpreted or compiled? 38 | - What is an Abstract Syntax Tree? 39 | - Life cycle: a brief overview of compiling a piece of Python code - from source code through bytecode and execution, focusing on the role of the AST. 5,000-foot overview. 40 | - Build an understanding of the broad steps it takes to compile a piece of Python code 41 | * TOOLS FOR WORKING WITH ASTS - PART 1 (6 minutes, 13 total) 42 | - Primary (built-in to Python): AST and DIS modules 43 | - Secondary (third party): astor, meta, codegen 44 | - Code examples to walk through how the AST and bytecode are represented and accessed: 45 | - Using the built-in AST module to inspect a few small piece of code 46 | - Using dis to inspect the bytecode from the example 47 | - Running the dissected code 48 | - Side-by-side comparisons of the visualization of an AST and its bytecode for a few simple pieces of code 49 | * CURRENT COMPILER OPTIMIZATIONS (4 minutes, 17 total) 50 | - Current optimizations built into the AST (and ones that could be) 51 | - What does one gain from optimizing the AST? 52 | - How is the AST optimized? 53 | - Constant folding, peephole optimizations - easy, quick descriptions of each 54 | * TOOLS FOR WORKING WITH ASTS - PART 2 (6 minutes, 23 total) 55 | - Examples of how constant folding and peephole optimizations can affect your AST and bytecode 56 | * AST -> BYTECODE -> RUNTIME (2 minutes, 25 total) 57 | - How the AST affects your bytecode, and how your bytecode affects your runtime 58 | - Spoiler alert: it creates those *.pyc and *.pyo files! And those contain bytecode. 59 | - Mention the difference between *.pyc files and *pyo files. 60 | * PRACTICAL/OPTIMIZATION EXAMPLES (3 minutes, 28 total) 61 | - Motivating examples of ways to optimize your code to take advantage of AST and other compiler optimizations 62 | - Applications within Python: 63 | - Improve and speed up your code 64 | - Debug errors 65 | - Change the Python grammar 66 | - Round-Tripping 67 | - Code generators 68 | - Alternative interpreters 69 | - Applications outside of Python 70 | - Code analysis 71 | - Code linting 72 | - Tools such as Post-CSS and Babel 73 | * CONCLUSION / NEXT STEPS / RESOURCES (2 minutes, 30 total) 74 | 75 | Bio: 76 | ---- 77 | Emily Morehouse-Valcarcel is the Cofounder and Director of Engineering of Cuttlesoft, a digital product development agency focused on creating beautifully designed and highly scalable custom software. Her passion is driven by the unique blend of empathy, strategy, curiosity, and human-centered design. When she isn’t leading Cuttlesoft, Emily is an avid Open Source Software contributor and constant learner with side projects focused on automating the mundane, improving daily life, and shedding light on the complexity of the human experience. A graduate of the Florida State University, Emily holds bachelor's degrees in Computer Science, Criminology, and Theatre. 78 | -------------------------------------------------------------------------------- /accepted/what-to-expect-djangocon.md: -------------------------------------------------------------------------------- 1 | Title: 2 | ------ 3 | What To Expect When You’re Expecting: A Hands-On Guide to Regression Testing 4 | 5 | Conference: 6 | ----------- 7 | DjangoCon US 8 | October 14-19, 2018 (Tutorials - 14, Talks 15-17) 9 | San Diego, CA 10 | 11 | Elevator Pitch: 12 | --------------- 13 | We all know we should be testing our applications, but testing is hard and great testing is even harder. Take a deep dive into what and how to test your Django apps, plus learn how to leverage modern headless browser libraries and automated visual diff-ing to get (and keep) pixel-perfect apps. 14 | 15 | Talk Format: 16 | ------------ 17 | Tutorial, 3-3.5 hours 18 | 19 | Audience Level: 20 | --------------- 21 | Intermediate 22 | 23 | About This Tutorial: 24 | -------------------- 25 | We all know we should be testing our applications, but testing is hard and great testing is even harder. 26 | 27 | Take a deep dive into what types of things to test and how to approach testing them in your Django apps, plus learn how to leverage modern headless browser libraries and automated visual diff-ing to get (and keep) pixel-perfect apps. 28 | 29 | We'll cover types of testing as a whole, plus practical applications and deep dives for testing in Django and visual regression testing with Javascript (whether for templates rendered by Django or for a standalone Javascript client application). 30 | 31 | Tutorial Outline: 32 | ----------------- 33 | ## Outline: 34 | * Introduction (10 mins, 10 mins total) 35 | * Introduction, outline, and expectations of what you should take away from this tutorial 36 | * Foundational Knowledge for Testing (35 mins, 45 mins total) 37 | * Testing, Wat? 38 | * We all know we should be writing tests for our code, but what does that really mean? 39 | * What does writing tests “in the real world” look like? 40 | * Rapid-Fire Introduction to Testing: 20,000 foot view, short descriptions of different types of testing 41 | * What kinds of tests are most impactful for different use cases? 42 | * The Importance Of Consistent Regression Testing 43 | * Change blindness 44 | * Anatomy Of A Test 45 | * Ingredients for successful testing 46 | * Process and workflows for testing 47 | * What Should You Be Testing? 48 | * Good tests mimic good bug reports 49 | * Approaches For Regression Testing 50 | * Approaches For Visual Regression Testing 51 | * Visual Regression Testing Is Easier In 2018! 52 | * Walkthrough - Regression Testing in Django (1 hr, 1.75 hr total) 53 | * From a carefully crafted starter application, we'll walk through the important aspects of our application that must, could and should be tested. We'll also cover tips for scoping out areas that are more likely to have bugs introduced and ways to separate your code appropriately for the best testing approaches. 54 | * Walkthrough - Visual Regression Testing Powered By Javascript (45 mins, 2.5 hrs total) 55 | * From our same carefully crafter starter app, we'll add visual regression tests using my test runner, test assertion, web driver, and image diff libraries of choice. (Yes, you CAN use Python for this, but there are some awesome JS libraries that make our lives even easier). 56 | * Flex Time (remainder of time left) 57 | * Additional time for breaking things and putting them back together, questions, helping each other, etc. 58 | * Conclusion 59 | * Wrap up, call to action, and suggested tools/resources 60 | 61 | Audience Expectations: 62 | ---------------------- 63 | A foundational knowledge of Python and a web framework of choice is beneficial, as we'll dive right into testing an existing application. Starter code and code progressions will be provided, so you don't have to be a Django expert to grasp the content! Whether you love, hate, or have never used Javascript, you'll feel at home; our use of JS will be limited to leveraging libraries to gather data and screenshots for visual regression testing, whether for a JS client or a Django web app. 64 | 65 | Notes: 66 | ------ 67 | As a mentor and lead engineer, I’m constantly asked questions about why testing is important, what you should actually be testing, and what testing looks like in the real world. I’m hoping that this tutorial can shed light on all of those questions to give clarity and confidence to developers when approaching testing. I’m also a huge fan of regression tests and believe that visual regression tests are key to maintaining well-designed and user-friendly sites. 68 | 69 | I took care when formulating this proposal to cover all audience levels. I find that it’s best to create a foundation with basic information and terminology to give all audience members a chance to understand a more advanced topic, while making sure the information being covered is integral to the topic at hand. I rely upon finding a happy medium of keeping information simple yet dense to allow for broad topics to be described quickly so we can move quickly from “what is a test?” to implementing visual regression tests. 70 | 71 | I have 6+ years of experience testing and building applications not only in the JavaScript/Python worlds but in many other languages and frameworks as well. I believe that my wide range of experience can shed light on this topic and cross-pollinate my approaches to testing. 72 | 73 | --- 74 | 75 | Private Info (revealed after rated): 76 | 77 | Bio: (500 character limit): 78 | ---------------------------- 79 | Emily Morehouse-Valcarcel is the Director of Engineering at Cuttlesoft, a digital product agency focused on creating beautifully designed software. Her passion is driven by a blend of empathy, strategy, curiosity, and human-centered design. She's an avid OSS contributor and constant learner focused on building tools to automate the mundane and shed light on the complexity of the human experience. Emily holds degrees in Computer Science, Criminology, and Theatre from Florida State University. 80 | -------------------------------------------------------------------------------- /accepted/the-ast-and-me-pycon.md: -------------------------------------------------------------------------------- 1 | Title: 2 | ------ 3 | The AST and Me 4 | 5 | Conference: 6 | ----------- 7 | PyCon 2018 8 | May 9-17, 2018 9 | Cleveland, OH 10 | 11 | Talk Format: 12 | ------------ 13 | Talk - 30 minutes 14 | 15 | Description: 16 | ------------ 17 | Get under the hood and learn about Python's beloved Abstract Syntax Tree. Ever wonder how Python code is run? Overheard people arguing about whether Python is interpreted or compiled? In this talk, we will delve into the lifecycle of a piece of Python code in order to understand the role that Python's Abstract Syntax Tree plays in shaping the runtime of your code. Utilizing your newfound knowledge of Python's AST, you'll get a taste of how you probably already rely on ASTs and how they can be used to build awesome tools. 18 | 19 | Who and Why (Audience): 20 | ----------------------- 21 | This talk can spark interest in people in many different ways, from a desire to understand how Python's internals work at a high level and how that can inform better code, to using an AST to lint code or build new tools (with Python or many other languages). Many talks have used Python's bytecode and code objects to delve into Python's internals, but you don't have to go that far! The AST is an excellent bridge to understand how your code works and the optimizations applied to your code at that level. 22 | 23 | I expect audience members to have a working knowledge of Python in order to understand the code that's being used (code for simple print statements, if/else statements, for loops and lambdas are dissected into their AST and bytecode, and audience members should not be caught up on what a lambda is, for example). It would be ideal for audience members to have an idea of how an interpreted language is structured and how compilers work, but I'll go through the highlights of crucial knowledge for this at the beginning of the talk. For these reasons, I would consider this talk to be geared toward "Intermediate" individuals. 24 | 25 | The audience should walk away with a better understanding of how Python and its compiler works, how to interact with and visualize their code in new ways, useful knowledge about Python's optimizations, and a variety of applications of using ASTs to build cool tools. 26 | 27 | Outline: 28 | -------- 29 | * INTRODUCTION AND OUTLINE (2 minutes, 2 total) 30 | - Quick introduction of myself 31 | - Outline of what will be covered and what you will learn 32 | - My motivation for giving this talk 33 | * WHY? (1 minute, 3 total) 34 | - Why should you care about Python internals? 35 | - Why a bit of knowledge about Python internals goes a long way 36 | * OVERVIEW (4 minutes, 7 total) 37 | - Is Python interpreted or compiled? 38 | - What is an Abstract Syntax Tree? 39 | - Life cycle: a brief overview of compiling a piece of Python code - from source code through bytecode and execution, focusing on the role of the AST. 5,000-foot overview. 40 | - Build an understanding of the broad steps it takes to compile a piece of Python code 41 | * TOOLS FOR WORKING WITH ASTS - PART 1 (6 minutes, 13 total) 42 | - Primary (built-in to Python): AST and DIS modules 43 | - Secondary (third party): astor, meta, codegen 44 | - Code examples to walk through how the AST and bytecode are represented and accessed: 45 | - Using the built-in AST module to inspect a few small piece of code 46 | - Using dis to inspect the bytecode from the example 47 | - Running the dissected code 48 | - Side-by-side comparisons of the visualization of an AST and its bytecode for a few simple pieces of code 49 | * CURRENT COMPILER OPTIMIZATIONS (4 minutes, 17 total) 50 | - Current optimizations built into the AST (and ones that could be) 51 | - What does one gain from optimizing the AST? 52 | - How is the AST optimized? 53 | - Constant folding, peephole optimizations - easy, quick descriptions of each 54 | * TOOLS FOR WORKING WITH ASTS - PART 2 (6 minutes, 23 total) 55 | - Examples of how constant folding and peephole optimizations can affect your AST and bytecode 56 | * AST -> BYTECODE -> RUNTIME (2 minutes, 25 total) 57 | - How the AST affects your bytecode, and how your bytecode affects your runtime 58 | - Spoiler alert: it creates those *.pyc and *.pyo files! And those contain bytecode. 59 | - Mention the difference between *.pyc files and *pyo files. 60 | * PRACTICAL/OPTIMIZATION EXAMPLES (3 minutes, 28 total) 61 | - Motivating examples of ways to optimize your code to take advantage of AST and other compiler optimizations 62 | - Applications within Python: 63 | - Improve and speed up your code 64 | - Debug errors 65 | - Change the Python grammar 66 | - Round-Tripping 67 | - Code generators 68 | - Alternative interpreters 69 | - Applications outside of Python 70 | - Code analysis 71 | - Code linting 72 | - Tools such as Post-CSS and Babel 73 | * CONCLUSION / NEXT STEPS / RESOURCES (2 minutes, 30 total) 74 | 75 | 76 | Additional Notes: 77 | ----------------- 78 | By the time PyCon 2018 rolls around, I will have given this talk to at least two local meetups and one smaller regional conference. 79 | 80 | I've been working on delving into CPython source code for over a year with the mentorship of some of Python's core developers and have been particularly interested in the internals of its compiler and optimizations. 81 | 82 | Bio: 83 | ---- 84 | Emily Morehouse-Valcarcel is the Cofounder and Director of Engineering of Cuttlesoft, a digital product development agency focused on creating beautifully designed and highly scalable custom software. Her passion is driven by the unique blend of empathy, strategy, curiosity, and human-centered design. When she isn’t leading Cuttlesoft, Emily is an avid Open Source Software contributor and constant learner with side projects focused on automating the mundane, improving daily life, and shedding light on the complexity of the human experience. A graduate of the Florida State University, Emily holds bachelor's degrees in Computer Science, Criminology, and Theatre. 85 | -------------------------------------------------------------------------------- /accepted/what-to-expect-dinosaurjs.md: -------------------------------------------------------------------------------- 1 | Title: 2 | ------ 3 | What To Expect When You’re Expecting 4 | 5 | Conference: 6 | ----------- 7 | DinosaurJS 8 | June 21-22, 2018 9 | Denver, CO 10 | 11 | Abstract - Provide a concise description for the program limited to 600 characters or less: 12 | -------------------------------------------------------------------------------------------- 13 | We all know we *should* be testing our applications, but testing is hard and *great* testing is even harder. Brush off your knowledge of different types of testing to hone in on exactly what you should test in your applications, and explore different approaches you can take in doing so. Take a deep dive into regression testing with a focus on visual regressions, and figure out what you should put in that `expect()` statement. Learn how to leverage modern headless browser libraries and automated diff-ing to get (and keep) pixel-perfect apps. 14 | 15 | Talk Format: 16 | ------------ 17 | 25-30 minutes 18 | 19 | 20 | Details - Include any pertinent details such as outlines, outcomes or intended audience: 21 | ----------------------------------------------------------------------------------------- 22 | ## Outline: 23 | * INTRODUCTION AND OUTLINE (1 minute, 1 total) 24 | * Quick introduction of myself 25 | * Outline of what will be covered and what you will learn 26 | * My motivation for giving this talk 27 | * TESTING, WAT? (1 minute, 2 total) 28 | * We all know we should be writing tests for our code, but what does that really mean? 29 | * What does writing tests “in the real world” look like? 30 | * OVERVIEW (3 minutes, 5 total) 31 | * Rapid-Fire Introduction to Testing - 20,000 foot view, short descriptions of different types of testing 32 | * Unit Testing 33 | * Integration Testing 34 | * Regression Testing 35 | * Functional Testing 36 | * System Testing 37 | * Performance Testing 38 | * Usability Testing 39 | * Accessibility Testing 40 | * Chaos Testing 41 | * Stress Testing 42 | * What kinds of tests are most impactful for different use cases? 43 | * Shout out to accessibility testing - it’s surprisingly easy to do and can point out oversights that are very easy to fix and are very impactful 44 | * THE IMPORTANCE OF CONSISTENT REGRESSION TESTING (1 minutes, 6 total) 45 | * [Change blindness](http://enacademic.com/dic.nsf/enwiki/1159161) - the human brain isn’t good at remembering minute details of stimuli, and therefore it’s much better to let a computer handle detecting changes, both visual and functional 46 | * The larger your application gets, the more existing features may (unintentionally) break as you add new code! 47 | * ANATOMY OF A TEST (3 minutes, 9 total) 48 | * Ingredients: 49 | * Test environment (e.g., Mocha, Jasmine, Jest, Karma) 50 | * Testing structure (e.g., Mocha, Jasmine, Jest, Cucumber) 51 | * Assertions (e.g., Chai, Jasmine, Jest, Unexpected) 52 | * Mocks, spies, and stubs (e.g., Sinon, Jasmine, enzyme, Jest, testdouble) 53 | * Browser or browser-like environment (e.g., Protractor, Nightwatch, Phantom, Casper) 54 | * Process: 55 | * Generate, display, and watch test results 56 | * Generate and compare snapshots to make sure changes from previous runs are intended 57 | * Generate code coverage reports 58 | * WHAT SHOULD YOU EXPECT? (3 minutes, 12 total) 59 | * Good tests mimic good bug reports: 60 | * What were you testing? 61 | * What should it do? 62 | * What was the output (actual behavior)? 63 | * What was the expected output (expected behavior)? 64 | * APPROACHES FOR VISUAL REGRESSION TESTING (2 minutes, 14 total) 65 | * Developers maintain a set of “golden” images, whether screenshots or mocks, that represent what the application *should* look like 66 | * Tests are run that take screenshots of the current application and compare them against the “golden” set 67 | * Results can be received as either discrete pixel amounts or an overlay of screenshots with highlighted areas where they differ 68 | * VISUAL REGRESSION TESTING IS EASIER IN 2018 (1 minute, 15 total) 69 | * Previously, visual regression testing was tied to manipulating an actual browser using tools like Selenium or PhantomJS 70 | * [Headless Chrome](https://developers.google.com/web/updates/2017/04/headless-chrome) makes interacting with your browser much easier since you can control test environments without a visible UI 71 | * WALKTHROUGH - TOOLS FOR VISUAL REGRESSION TESTING (2 minutes, 17 total) 72 | * [Puppeteer](https://github.com/GoogleChrome/puppeteer) - Headless Chrome Node API 73 | * [Resemble.js](https://github.com/Huddle/Resemble.js) - Visual image comparison 74 | * Runner and assertion libraries of choice - we’ll use Mocha and Chai 75 | * WALKTHROUGH WITH CODE SNIPPETS (this will have a companion repo on GitHub) (8 minutes, 25 total) 76 | * Set up your test environment: 77 | * `before` - start your local server, make sure your directories to store screenshots exists 78 | * `after` - stop your server 79 | * `afterEach` - reload your Puppeteer browser 80 | * Set up a test: 81 | * Load the Puppeteer browser 82 | * Set your viewport size, or emulate a specific device 83 | * Take the screenshot 84 | * Compare your screenshot with the expected view 85 | * Example (I would include this as a demo, but this is cool to see the output that you get when your site changes): 86 | * Original screenshot of DinosaurJS site: ![original screenshot of DinosaurJS site](https://s3.amazonaws.com/dinojs/dinosaurjs.org_original.png) 87 | * Screenshot of DinosaurJS site with elements moved: ![screenshot of DinosaurJS site with elements moved](https://s3.amazonaws.com/dinojs/dinosaurjs.org_changed.png) 88 | * Image showing diff between screenshots: ![image showing diff between screenshots](https://s3.amazonaws.com/dinojs/dinosaurjs.org_diff.png) 89 | * CONCLUSION (1 minute, 26 total) 90 | * Wrap up and call to action 91 | 92 | Pitch - Explain why this talk should be considered and what makes you qualified to speak on the topic: 93 | ------------------------------------------------------------------------------------------------------- 94 | As a mentor and lead engineer, I’m constantly asked questions about why testing is important, what you should actually be testing, and what testing looks like in the real world. I’m hoping that this talk can shed light on all of those questions to give clarity and confidence to developers when approaching testing. I’m also a huge fan of regression tests and believe that visual regression tests are key to maintaining well-designed and user-friendly sites. 95 | 96 | I took care when writing this proposal to cover all audience levels. I find that it’s best to create a foundation with basic information and terminology to give all audience members a chance to understand a more advanced topic. I rely upon finding a happy medium of keeping information simple yet dense, to allow for broad topics to be described quickly so we can move quickly from “what is a test?” to implementing visual regression tests. 97 | 98 | This talk will be… 99 | … witty, but not cheesy. 100 | … dense, but accessible. 101 | … code-inclusive, but not code-heavy. 102 | 103 | I have 6+ years of experience testing and building applications not only in the JavaScript world but in many other languages and frameworks as well. I believe that my wide range of experience can shed light on this topic and cross-pollinate my approaches to testing. 104 | 105 | --- 106 | 107 | Private Info (revealed after rated): 108 | 109 | Bio: (500 character limit): 110 | ---------------------------- 111 | Emily Morehouse-Valcarcel is the Director of Engineering at Cuttlesoft, a digital product agency focused on creating beautifully designed software. Her passion is driven by a blend of empathy, strategy, curiosity, and human-centered design. She's an avid OSS contributor and constant learner focused on building tools to automate the mundane and shed light on the complexity of the human experience. Emily holds degrees in Computer Science, Criminology, and Theatre from Florida State University. 112 | 113 | Online recordings: 114 | ------------------- 115 | cut.tl/ast-and-me 116 | --------------------------------------------------------------------------------