{"id":4124,"date":"2016-08-27T15:30:16","date_gmt":"2016-08-27T23:30:16","guid":{"rendered":"https:\/\/blog.mozilla.org\/webdev\/?p=4124"},"modified":"2016-08-27T15:30:16","modified_gmt":"2016-08-27T23:30:16","slug":"beer-and-tell-august-2016","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/","title":{"rendered":"Beer and Tell &#8211; August 2016"},"content":{"rendered":"<p>Once a month, web developers from across the Mozilla Project get together to talk about our side projects and drink, an occurrence we like to call &#8220;Beer and<br \/>\nTell&#8221;.<\/p>\n<p>There&#8217;s a <a href=\"https:\/\/wiki.mozilla.org\/Webdev\/Beer_And_Tell\/2016\/August\">wiki page available<\/a> with a list of the presenters, as well as links to their presentation materials. There&#8217;s also a <a href=\"https:\/\/air.mozilla.org\/webdev-beer-and-tell-august-2016\/\">recording available<\/a> courtesy of Air Mozilla.<\/p>\n<h2>Osmose: PyJEXL<\/h2>\n<p>First up was <a href=\"https:\/\/mozillians.org\/en-US\/u\/Osmose\/\">Osmose<\/a> (that&#8217;s me!), who shared <a href=\"https:\/\/github.com\/Osmose\/pyjexl\">PyJEXL<\/a>, an implementation of <a href=\"https:\/\/github.com\/TechnologyAdvice\/Jexl\">JEXL<\/a> in Python. JEXL is an expression language based on JavaScript that computes the value of an expression when applied to a given context. For example, the statement <code>2 + foo<\/code>, when applied to a context where <code>foo<\/code> is 7, evaluates to 9. JEXL also allows for defining custom functions and operators to be used in expressions.<\/p>\n<p>JEXL is implemented as a JavaScript library; PyJEXL allows you to parse and evaluate JEXL expressions in Python, as well as analyze and validate expressions.<\/p>\n<h2>pmac: rtoot.org<\/h2>\n<p>Next up was <a href=\"https:\/\/mozillians.org\/en-US\/u\/pmac\/\">pmac<\/a>, who shared <a href=\"https:\/\/rtoot.org\/\">rtoot.org<\/a>, the website for &#8220;The Really Terrible Orchestra of the Triangle&#8221;. It&#8217;s a static site for pmac&#8217;s local orchestra built using <a href=\"https:\/\/www.getlektor.com\/\">lektor<\/a>, an easy-to-use static site generator. One of the more interesting features pmac highlighted was lektor&#8217;s <a href=\"https:\/\/www.getlektor.com\/docs\/models\/\">data model<\/a>. He showed a <a href=\"https:\/\/github.com\/pmac\/rtoot\/blob\/master\/packages\/csv-field\/lektor_csv_field.py\">lektor plugin<\/a> he wrote that added support for CSV fields as part of the data model, and used it to describe the orchestra&#8217;s rehearsal schedule.<\/p>\n<p>The site is deployed as a <a href=\"https:\/\/www.getlektor.com\/docs\/models\/\">Docker<\/a> container on a <a href=\"http:\/\/dokku.viewdocs.io\/dokku\/\">Dokku<\/a> instance. Dokku replicates the <a href=\"https:\/\/www.heroku.com\/\">Heroku<\/a> style of deployments by accepting Git pushes to trigger deploys. Dokku also has a great <a href=\"https:\/\/github.com\/dokku\/dokku-letsencrypt\">Let&#8217;s Encrypt<\/a> plugin for setting up and renewing HTTPS certificates for your apps.<\/p>\n<h2>groovecoder: Scary\/Tracky JS<\/h2>\n<p>Next was <a href=\"https:\/\/mozillians.org\/en-US\/u\/groovecoder\/\">groovecoder<\/a>, who previewed a lightning talk he&#8217;s been working on called &#8220;Scary JavaScript (and other Tech) that Tracks You Online&#8221;. The talk gives an overview of various methods that sites can use to track what sites you&#8217;ve visited without your consent. Some examples given include:<\/p>\n<ul>\n<li>Reading the color of a link to a site to see if it is the &#8220;visited link&#8221; color (this has been fixed in most browsers).<\/li>\n<li>Using <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/window\/requestAnimationFrame\">requestAnimationFrame<\/a> to time how long it took the browser to draw a link; visited links will take longer as the browser has to change their color and then remove it to avoid the previous vulnerability.<\/li>\n<li>Embed a resource from another website as a video, and time how long it takes for the browser to attempt and fail to parse the video; a low time indicates the resource was served from the cache and you&#8217;ve seen it before.<\/li>\n<li><a href=\"http:\/\/clearcode.cc\/2015\/12\/cookie-syncing\/\">Cookie Syncing<\/a><\/li>\n<\/ul>\n<p>groovecoder plans to give the talk at a few local conferences, leading up to the <a href=\"https:\/\/wiki.mozilla.org\/All_Hands\/2016_Hawaii\">Hawaii All Hands<\/a> where he will give the talk to Mozilla.<\/p>\n<h2>rdalal: Therapist<\/h2>\n<p><a href=\"https:\/\/github.com\/rehandalal\">rdalal<\/a> was next with <a href=\"https:\/\/github.com\/rehandalal\/therapist\">Therapist<\/a>, a tool to help create robust, easily-configurable pre-commit hooks for Git. It is configured via a <a href=\"http:\/\/yaml.org\/\">YAML<\/a> file at your project root, and can run any command you want to run before committing code, such as code linting or build commands. Therapist is also able to detect which files were changed by the commit and only run commands on those to help save time.<\/p>\n<h2>gregtatum: River &#8211; Paths Over Time<\/h2>\n<p>Last up was <a href=\"https:\/\/mozillians.org\/en-US\/u\/gregtatum\/\">gregtatum<\/a>, who shared <a href=\"http:\/\/gregtatum.com\/poems\/river\/\">River &#8211; Paths Over Time<\/a>. Inspired by the sight of rivers from above during the flight back from the London All Hands, Rivers is a simulation of rivers flowing and changing over time. The animation is drawn on a 2d canvas using rectangles that are drawn and then slowly faded over time; this slow fade creates the illusion of &#8220;drips&#8221; seeping into the ground as rivers shift position.<\/p>\n<p>The <a href=\"https:\/\/github.com\/TatumCreative\/river\">source code<\/a> for the simulation is available on Github, and is configured with several parameters that can be tweaked to change the behavior of the rivers.<\/p>\n<hr \/>\n<p>If you&#8217;re interested in attending the next Beer and Tell, sign up for the <a href=\"https:\/\/lists.mozilla.org\/listinfo\/dev-webdev\">dev-webdev@lists.mozilla.org mailing list<\/a>. An email is sent out a week beforehand with connection details. You could even add yourself to the wiki and show off your side-project!<\/p>\n<p>See you next month!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Once a month, web developers from across the Mozilla Project get together to talk about our side projects and drink, an occurrence we like to call &#8220;Beer and Tell&#8221;. There&#8217;s a wiki page available with a list of the presenters, &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/\">Continue reading<\/a><\/p>\n","protected":false},"author":445,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20263],"tags":[],"coauthors":[28315],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Beer and Tell - August 2016 - Mozilla Web Development<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Kelly\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/\",\"url\":\"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/\",\"name\":\"Beer and Tell - August 2016 - Mozilla Web Development\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#website\"},\"datePublished\":\"2016-08-27T23:30:16+00:00\",\"dateModified\":\"2016-08-27T23:30:16+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/c5d68eef83c0e4e0ae60176f557c1941\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/webdev\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Beer and Tell &#8211; August 2016\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#website\",\"url\":\"https:\/\/blog.mozilla.org\/webdev\/\",\"name\":\"Mozilla Web Development\",\"description\":\"For make benefit of glorious tubes\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.mozilla.org\/webdev\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/c5d68eef83c0e4e0ae60176f557c1941\",\"name\":\"Michael Kelly\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/image\/835c2c0db4a21fa347206563231f3e71\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a414aea4a5b11c6e2e00f760e96b85ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a414aea4a5b11c6e2e00f760e96b85ab?s=96&d=mm&r=g\",\"caption\":\"Michael Kelly\"},\"description\":\"Michael Kelly is a developer on the Web Engineering team at Mozilla. He works on tools that help engineers get things done. He also helps run a lot of the Webdev group activities!\",\"sameAs\":[\"http:\/\/mkelly.me\",\"https:\/\/x.com\/Osmose\"],\"url\":\"https:\/\/blog.mozilla.org\/webdev\/author\/mkellymozilla-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Beer and Tell - August 2016 - Mozilla Web Development","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/","twitter_misc":{"Written by":"Michael Kelly","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/","url":"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/","name":"Beer and Tell - August 2016 - Mozilla Web Development","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/webdev\/#website"},"datePublished":"2016-08-27T23:30:16+00:00","dateModified":"2016-08-27T23:30:16+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/c5d68eef83c0e4e0ae60176f557c1941"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/webdev\/2016\/08\/27\/beer-and-tell-august-2016\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/webdev\/"},{"@type":"ListItem","position":2,"name":"Beer and Tell &#8211; August 2016"}]},{"@type":"WebSite","@id":"https:\/\/blog.mozilla.org\/webdev\/#website","url":"https:\/\/blog.mozilla.org\/webdev\/","name":"Mozilla Web Development","description":"For make benefit of glorious tubes","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.mozilla.org\/webdev\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/c5d68eef83c0e4e0ae60176f557c1941","name":"Michael Kelly","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/image\/835c2c0db4a21fa347206563231f3e71","url":"https:\/\/secure.gravatar.com\/avatar\/a414aea4a5b11c6e2e00f760e96b85ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a414aea4a5b11c6e2e00f760e96b85ab?s=96&d=mm&r=g","caption":"Michael Kelly"},"description":"Michael Kelly is a developer on the Web Engineering team at Mozilla. He works on tools that help engineers get things done. He also helps run a lot of the Webdev group activities!","sameAs":["http:\/\/mkelly.me","https:\/\/x.com\/Osmose"],"url":"https:\/\/blog.mozilla.org\/webdev\/author\/mkellymozilla-com\/"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts\/4124"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/users\/445"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/comments?post=4124"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts\/4124\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/media?parent=4124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/categories?post=4124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/tags?post=4124"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/coauthors?post=4124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}