{"id":4056,"date":"2015-09-23T09:35:44","date_gmt":"2015-09-23T17:35:44","guid":{"rendered":"https:\/\/blog.mozilla.org\/webdev\/?p=4056"},"modified":"2015-09-23T09:35:44","modified_gmt":"2015-09-23T17:35:44","slug":"beer-and-tell-september-2015","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/","title":{"rendered":"Beer and Tell &#8211; September 2015"},"content":{"rendered":"<p>Once a month, web developers from across the Mozilla Project get together to design user-friendly advertisements. When we&#8217;re not deciding which police alarm we want to auto-play, we find time to talk about our side projects and drink, an occurrence we like to call &#8220;Beer and Tell&#8221;.<\/p>\n<p>There&#8217;s a <a href=\"https:\/\/wiki.mozilla.org\/Webdev\/Beer_And_Tell\/September_2015\">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-september-2015\/\">recording available<\/a> courtesy of Air Mozilla.<\/p>\n<h2>Erik Rose: Whitespace-significant Meta-grammar for Homoiconic Languages<\/h2>\n<p>The only presenter this week was <a href=\"https:\/\/mozillians.org\/en-US\/u\/ErikRose\/\">ErikRose<\/a>, who shared a prototype grammar for a class of whitespace-significant programming languages. The goal was to represent the nested-list structure of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Homoiconicity\">homoiconic<\/a> languages like Lisp while keeping redundant bracing out of the way like Python.<\/p>\n<pre>\nif is_yak then\n    shave yak\n    bathe yak\n  else\n    do productive_work\n\n--> (if is_yak then\n        ((shave yak)\n         (bathe yak))\n     else\n        ((do productive_work))\n    )\n<\/pre>\n<p>Normally, when the <code>else<\/code> statement in code similar to the sample above isn&#8217;t indented and is at the same level as the <code>if<\/code> statement, the parser must know that <code>else<\/code> statements may follow after <code>if<\/code> statements and are related to them. To get around this, ErikRose suggests using a <em>partial outdent<\/em>. This way, the parser can recognize that the <code>else<\/code> statement is separate from the <code>shave<\/code> and <code>bathe<\/code> lines but should still be grouped with the <code>if<\/code> statement, even if the parser doesn&#8217;t know what an <code>if<\/code> statement is.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/erikrose\/7853084a562b3bce90cf\">Erik&#8217;s gist<\/a> contains a few more samples and a possible grammar for parsing a language like this using <a href=\"https:\/\/github.com\/erikrose\/parsimonious\/\">Parsimonious<\/a>, his parsing library.<\/p>\n<hr \/>\n<p>Our focus group of QVC customers has given us great insight in to just what the average internet user is looking for in their sponsored content. Early retirement, here we come!<\/p>\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 design user-friendly advertisements. When we&#8217;re not deciding which police alarm we want to auto-play, we find time to talk about our side projects and drink, an occurrence &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/\">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 - September 2015 - 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\/2015\/09\/23\/beer-and-tell-september-2015\/\" \/>\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=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/\",\"url\":\"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/\",\"name\":\"Beer and Tell - September 2015 - Mozilla Web Development\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#website\"},\"datePublished\":\"2015-09-23T17:35:44+00:00\",\"dateModified\":\"2015-09-23T17:35:44+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/c5d68eef83c0e4e0ae60176f557c1941\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/webdev\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Beer and Tell &#8211; September 2015\"}]},{\"@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 - September 2015 - 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\/2015\/09\/23\/beer-and-tell-september-2015\/","twitter_misc":{"Written by":"Michael Kelly","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/","url":"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/","name":"Beer and Tell - September 2015 - Mozilla Web Development","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/webdev\/#website"},"datePublished":"2015-09-23T17:35:44+00:00","dateModified":"2015-09-23T17:35:44+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/c5d68eef83c0e4e0ae60176f557c1941"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/webdev\/2015\/09\/23\/beer-and-tell-september-2015\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/webdev\/"},{"@type":"ListItem","position":2,"name":"Beer and Tell &#8211; September 2015"}]},{"@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\/4056"}],"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=4056"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts\/4056\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/media?parent=4056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/categories?post=4056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/tags?post=4056"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/coauthors?post=4056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}