{"id":3669,"date":"2016-04-14T11:50:21","date_gmt":"2016-04-14T11:50:21","guid":{"rendered":"http:\/\/www.garysieling.com\/blog\/?p=3669"},"modified":"2016-04-14T11:50:21","modified_gmt":"2016-04-14T11:50:21","slug":"philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness","status":"publish","type":"post","link":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/","title":{"rendered":"Philly ETE Talk Notes: &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;"},"content":{"rendered":"<p>One of the ETE talks I attended was called &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;, by <a href=\"https:\/\/twitter.com\/jessitron\">Jessica Kerr<\/a>. She has several more talks available<sup><a href=\"#footnote_1_3669\" id=\"identifier_1_3669\" class=\"footnote-link footnote-identifier-link\" title=\"http:\/\/jessitron.com\/talks.html\">1<\/a><\/sup><\/p>\n<p>Elm is one of a number of languages that compiles to Javascript (Coffeescript, ScalaJS, ClojureScript, TypeScript, etc). It adds types and strict immutability, and an event loop that appears to take control of the entire page (you can call out to Javascript if you get stuck). From the outside this appears to me to be a bit similar architecture to using ClojureScript + Om + React. <\/p>\n<p>Elm has a virtual DOM and event loop, which is familiar coming from having used React + my vague understanding of Redux \/ Flux. The event loop concept is neat, and there is a fairly well-known talk that shows the mind-blowing utility of this<sup><a href=\"#footnote_2_3669\" id=\"identifier_2_3669\" class=\"footnote-link footnote-identifier-link\" title=\"https:\/\/www.youtube.com\/watch?v=RUeLd7T7Xi4\">2<\/a><\/sup>, though I think that demo of Elm to make a game makes some people think it&#8217;s not for them.<\/p>\n<p>The biggest problems I personally have currently with React on it&#8217;s own is that if I just write Javascript code, the only way to tell if it&#8217;s correct is to step through the code, and the architecture is nearly impossible to enforce, so is Elm is one of several potentially appealing answers.<\/p>\n<p>To see an example of some Elm code, there is a utility that converts JSON to typed ELM objects<sup><a href=\"#footnote_3_3669\" id=\"identifier_3_3669\" class=\"footnote-link footnote-identifier-link\" title=\"http:\/\/noredink.github.io\/json-to-elm\/\">3<\/a><\/sup><\/p>\n<pre lang=\"elm\">\nimport Json.Encode\nimport Json.Decode exposing<sup><a href=\"#footnote_4_3669\" id=\"identifier_4_3669\" class=\"footnote-link footnote-identifier-link\" title=\":=\">4<\/a><\/sup>\n-- elm-package install --yes circuithub\/elm-json-extra\nimport Json.Decode.Extra exposing<sup><a href=\"#footnote_5_3669\" id=\"identifier_5_3669\" class=\"footnote-link footnote-identifier-link\" title=\"|:\">5<\/a><\/sup>\n\ntype alias Something =\n    { \n    }\n\ndecodeSomething : Json.Decode.Decoder Something\ndecodeSomething =\n    Json.Decode.succeed Something\n        |: (\"\" := decode_Unknown)\n\nencodeSomething : Something -> Json.Encode.Value\nencodeSomething record =\n    Json.Encode.object\n        [ (\"\",  encode_Unknown <| record.)\n        ]\n<\/pre>\n<p>The compilation step is done through \"elm make\"<sup><a href=\"#footnote_6_3669\" id=\"identifier_6_3669\" class=\"footnote-link footnote-identifier-link\" title=\"https:\/\/github.com\/elm-lang\/elm-make\">6<\/a><\/sup>. There is also an elm-format<sup><a href=\"#footnote_7_3669\" id=\"identifier_7_3669\" class=\"footnote-link footnote-identifier-link\" title=\"https:\/\/github.com\/avh4\/elm-format\">7<\/a><\/sup> that does auto-formatting for you like Scalariform. This which has some benefits, e.g. moving the argument about formatting into it's own little hole on the internet where you can safely ignore it. Apparently one of the goals of elm-format is to make source control history better by preferring more lines over longer ones, which is fantastic (as a counter-example, compare this to the combinable Scala imports, which make for a truly miserable merge process).<\/p>\n<pre lang=\"scala\">\nimport a.b.c\nimport a.b.{c, d}\n<\/pre>\n<p>The Elm compiler also enforces semantic versioning, so you can safely depend on a version range. I don't know of another technology that has a feature like this to compare, it sounds like a great idea, although it's the sort of thing that could be challenging on a large project. Specifically this means you can add APIs in a point release, but not take them away, and depend on other people to do the same.<\/p>\n<p>The compiler prevents circular dependencies at the module level, and even better, prevents you from directly accessing a transitive dependency without directly requiring it (one of the meta-themes of this year's ETE was \"things you wish NPM had\")<\/p>\n<p>The compiler is designed to give error messages that help the developer, rather than punishing them. The inclusion of \"kindness\" in the title of the talk is a neat choice: collectively the tools in the Elm ecosystem are designed around kindness toward the programmer, a goal more tools should have. <\/p>\n<ol class=\"footnotes\"><li id=\"footnote_1_3669\" class=\"footnote\">http:\/\/jessitron.com\/talks.html<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_1_3669\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_2_3669\" class=\"footnote\">https:\/\/www.youtube.com\/watch?v=RUeLd7T7Xi4<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_2_3669\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_3_3669\" class=\"footnote\">http:\/\/noredink.github.io\/json-to-elm\/<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_3_3669\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_4_3669\" class=\"footnote\">:=<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_4_3669\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_5_3669\" class=\"footnote\">|:<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_5_3669\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_6_3669\" class=\"footnote\">https:\/\/github.com\/elm-lang\/elm-make<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_6_3669\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><li id=\"footnote_7_3669\" class=\"footnote\">https:\/\/github.com\/avh4\/elm-format<span class=\"footnote-back-link-wrapper\"> [<a href=\"#identifier_7_3669\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/span><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[4],"tags":[112,244,302,400,455],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"gary\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Gary Sieling - Software Engineer\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Philly ETE Talk Notes: \u201cAdventures in Elm: Events, Reproducibility, and Kindness\u201d - Gary Sieling\" \/>\n\t\t<meta property=\"og:description\" content=\"This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2016-04-14T11:50:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2016-04-14T11:50:21+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Philly ETE Talk Notes: \u201cAdventures in Elm: Events, Reproducibility, and Kindness\u201d - Gary Sieling\" \/>\n\t\t<meta name=\"twitter:description\" content=\"This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#blogposting\",\"name\":\"Philly ETE Talk Notes: \\u201cAdventures in Elm: Events, Reproducibility, and Kindness\\u201d - Gary Sieling\",\"headline\":\"Philly ETE Talk Notes: &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;\",\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"},\"datePublished\":\"2016-04-14T11:50:21+00:00\",\"dateModified\":\"2016-04-14T11:50:21+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#webpage\"},\"articleSection\":\"Code Examples, clojure, functional programming, javascript, om, react\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"position\":2,\"name\":\"Code Examples\",\"item\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#listItem\",\"name\":\"Philly ETE Talk Notes: &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#listItem\",\"position\":3,\"name\":\"Philly ETE Talk Notes: &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/category\\\/code-examples\\\/#listItem\",\"name\":\"Code Examples\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/\",\"name\":\"gary\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"gary\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#webpage\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/\",\"name\":\"Philly ETE Talk Notes: \\u201cAdventures in Elm: Events, Reproducibility, and Kindness\\u201d - Gary Sieling\",\"description\":\"This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/author\\\/gary\\\/#author\"},\"datePublished\":\"2016-04-14T11:50:21+00:00\",\"dateModified\":\"2016-04-14T11:50:21+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/\",\"name\":\"Gary Sieling\",\"description\":\"Software Engineer\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.garysieling.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Philly ETE Talk Notes: \u201cAdventures in Elm: Events, Reproducibility, and Kindness\u201d - Gary Sieling","description":"This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment.","canonical_url":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#blogposting","name":"Philly ETE Talk Notes: \u201cAdventures in Elm: Events, Reproducibility, and Kindness\u201d - Gary Sieling","headline":"Philly ETE Talk Notes: &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;","author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"},"datePublished":"2016-04-14T11:50:21+00:00","dateModified":"2016-04-14T11:50:21+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#webpage"},"isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#webpage"},"articleSection":"Code Examples, clojure, functional programming, javascript, om, react"},{"@type":"BreadcrumbList","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.garysieling.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","position":2,"name":"Code Examples","item":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#listItem","name":"Philly ETE Talk Notes: &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#listItem","position":3,"name":"Philly ETE Talk Notes: &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;","previousItem":{"@type":"ListItem","@id":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/#listItem","name":"Code Examples"}}]},{"@type":"Organization","@id":"https:\/\/www.garysieling.com\/blog\/#organization","name":"Gary Sieling","description":"Software Engineer","url":"https:\/\/www.garysieling.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author","url":"https:\/\/www.garysieling.com\/blog\/author\/gary\/","name":"gary","image":{"@type":"ImageObject","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/0be925276d848ffe98a6a9dc8cf33e67?s=96&d=identicon&r=g","width":96,"height":96,"caption":"gary"}},{"@type":"WebPage","@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#webpage","url":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/","name":"Philly ETE Talk Notes: \u201cAdventures in Elm: Events, Reproducibility, and Kindness\u201d - Gary Sieling","description":"This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.garysieling.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/#breadcrumblist"},"author":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"creator":{"@id":"https:\/\/www.garysieling.com\/blog\/author\/gary\/#author"},"datePublished":"2016-04-14T11:50:21+00:00","dateModified":"2016-04-14T11:50:21+00:00"},{"@type":"WebSite","@id":"https:\/\/www.garysieling.com\/blog\/#website","url":"https:\/\/www.garysieling.com\/blog\/","name":"Gary Sieling","description":"Software Engineer","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.garysieling.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Gary Sieling - Software Engineer","og:type":"article","og:title":"Philly ETE Talk Notes: \u201cAdventures in Elm: Events, Reproducibility, and Kindness\u201d - Gary Sieling","og:description":"This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment.","og:url":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/","article:published_time":"2016-04-14T11:50:21+00:00","article:modified_time":"2016-04-14T11:50:21+00:00","twitter:card":"summary_large_image","twitter:title":"Philly ETE Talk Notes: \u201cAdventures in Elm: Events, Reproducibility, and Kindness\u201d - Gary Sieling","twitter:description":"This talk discussed an interesting ecosystem for Javascript development, aimed at being a pleasant and predictable programming environment."},"aioseo_meta_data":{"post_id":"3669","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2023-02-04 16:48:35","updated":"2026-07-06 01:46:54","ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/\" title=\"Code Examples\">Code Examples<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tPhilly ETE Talk Notes: \u201cAdventures in Elm: Events, Reproducibility, and Kindness\u201d\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.garysieling.com\/blog"},{"label":"Code Examples","link":"https:\/\/www.garysieling.com\/blog\/category\/code-examples\/"},{"label":"Philly ETE Talk Notes: &#8220;Adventures in Elm: Events, Reproducibility, and Kindness&#8221;","link":"https:\/\/www.garysieling.com\/blog\/philly-ete-talk-notes-adventures-elm-events-reproducibility-kindness\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/3669"}],"collection":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/comments?post=3669"}],"version-history":[{"count":0,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/posts\/3669\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/media?parent=3669"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/categories?post=3669"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.garysieling.com\/blog\/wp-json\/wp\/v2\/tags?post=3669"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}