{"componentChunkName":"component---src-templates-blog-post-js","path":"/lost-arts/","result":{"data":{"site":{"siteMetadata":{"title":"Justin is a Maker","author":"Justin Smith"}},"mdx":{"id":"4b057818-59e1-5a75-9be2-444e4c24e0c2","frontmatter":{"title":"Lost Arts","date":"March 14, 2017","externalLink":null,"teaser":"Creating an easily changed WordPress site for the my favorite constantly-evolving makerspace."},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Lost Arts\",\n  \"date\": \"2017-03-14T00:00:00-0500\",\n  \"teaser\": \"Creating an easily changed WordPress site for the my favorite constantly-evolving makerspace.\",\n  \"featuredImage\": \"lost-arts-logo.png\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"One of the advantages of living in Chicago is the amount of options that you have access to. It\\u2019s not New York or Los Angeles, but more often than not you\\u2019re still going to have choices when it comes to most things. Makerspaces are no exception here\\u2013we have a plethora of spaces to choose from, and all of them are extremely different. Out of all of the iterations of spaces that I\\u2019ve seen in Chicago, Lost Arts has been my favorite. It struck a nice balance between a traditional makerspace and a coworking space, and it definitely drew the right crowd if you were interested in making awesome things in Chicago.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1080px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/c2e7cd4e1d810ffc875f996c3e9d2610/47311/lost-arts-synth.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"66.66666666666666%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAwAE/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQL/2gAMAwEAAhADEAAAAQzBsLCKT//EABkQAAMBAQEAAAAAAAAAAAAAAAABAhIxM//aAAgBAQABBQKsKVNUaoQvN9//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAAQMf/aAAgBAgEBPwGH/8QAGxAAAgEFAAAAAAAAAAAAAAAAAAEQERIxQXH/2gAIAQEABj8CfC5GXDpqP//EABwQAQACAgMBAAAAAAAAAAAAAAEAESExUWGB0f/aAAgBAQABPyGjDbliEJta3PK7jz8iNwFHwn//2gAMAwEAAgADAAAAEJz/AP/EABcRAQADAAAAAAAAAAAAAAAAAAABESH/2gAIAQMBAT8Q2VP/xAAWEQEBAQAAAAAAAAAAAAAAAAABEDH/2gAIAQIBAT8QAxP/xAAbEAEBAAMBAQEAAAAAAAAAAAABEQAhMVFBgf/aAAgBAQABPxANTWdBPX8wwpMrHurlFNqiKI+ZBXQ9NMmQM0I1ftmuZRsL9Xrn/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Synth Workshop and Concert at Lost Arts\",\n    \"title\": \"Synth Workshop and Concert at Lost Arts\",\n    \"src\": \"/static/c2e7cd4e1d810ffc875f996c3e9d2610/47311/lost-arts-synth.jpg\",\n    \"srcSet\": [\"/static/c2e7cd4e1d810ffc875f996c3e9d2610/f93b5/lost-arts-synth.jpg 300w\", \"/static/c2e7cd4e1d810ffc875f996c3e9d2610/b4294/lost-arts-synth.jpg 600w\", \"/static/c2e7cd4e1d810ffc875f996c3e9d2610/47311/lost-arts-synth.jpg 1080w\"],\n    \"sizes\": \"(max-width: 1080px) 100vw, 1080px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"href\": \"https://www.instagram.com/p/BKwVerVgBDg/?taken-by=lostarts\",\n    \"target\": \"_new\",\n    \"className\": \"image-caption\"\n  }, \"Synth Workshop and Concert at Lost Arts\")), mdx(\"p\", null, \"Lost Arts was founded in 2015 by Charles Adler, one of the co-founders of Kickstarter. The first version of the space was a month-long experiment housed in a recently-sold meat processing warehouse in the West Loop. I say experiment because that\\u2019s exactly what it was. Charles loves building communities and enabling folks to create, and that first iteration was him dipping his toe in the water to see if he could actually pull it off. The first iteration ran over the summer of that year, and brought together a who\\u2019s-who of the creative community in Chicago to make things together. There was no charge for participation or use of the tools\\u2013the only constraint was that the building would be torn down at the end of the month to make way for condos. I was able to help by keeping the fleet of 3D printers maintenanced and running, and it was off to the races for us.\"), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"Charles and I clicked, and I started seeking out other ways that I could help make sure that the experiment succeeded. One of the obvious ways that I could help was by creating a website for the space. The website for Lost Arts needed to reflect the vibrant and diverse community that gathers at the space, but it also needed to be easily maintained by folks who never wanted to touch code. As with many of my other projects, we decided that WordPress was the right tool for this job.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1080px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/9b5e6e427b5763faa9267b576f9b7225/47311/lost-arts-wood-shop.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"52.33333333333333%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIFBP/EABYBAQEBAAAAAAAAAAAAAAAAAAIAAf/aAAwDAQACEAMQAAABZJT49RQDf//EABsQAAIBBQAAAAAAAAAAAAAAAAECEQADBBAT/9oACAEBAAEFApUvKg9Foax1U2P/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAVEQEBAAAAAAAAAAAAAAAAAAAQEf/aAAgBAgEBPwGH/8QAGxAAAQQDAAAAAAAAAAAAAAAAEQABAjIQMVH/2gAIAQEABj8CsBxbKq2YmLL/xAAcEAEAAQQDAAAAAAAAAAAAAAABABEhMWFRkdH/2gAIAQEAAT8heumMElPHUoeczjiKKG903P/aAAwDAQACAAMAAAAQkD//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPxAn/8QAGBEBAQADAAAAAAAAAAAAAAAAAQARITH/2gAIAQIBAT8Qd+y4b//EABsQAQACAwEBAAAAAAAAAAAAAAEAESExQWFx/9oACAEBAAE/EAajIOJQ/A6J6haLPsJ6Ynt3HzcsFXKf/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The wood shop side of Lost Arts\",\n    \"title\": \"The wood shop side of Lost Arts\",\n    \"src\": \"/static/9b5e6e427b5763faa9267b576f9b7225/47311/lost-arts-wood-shop.jpg\",\n    \"srcSet\": [\"/static/9b5e6e427b5763faa9267b576f9b7225/f93b5/lost-arts-wood-shop.jpg 300w\", \"/static/9b5e6e427b5763faa9267b576f9b7225/b4294/lost-arts-wood-shop.jpg 600w\", \"/static/9b5e6e427b5763faa9267b576f9b7225/47311/lost-arts-wood-shop.jpg 1080w\"],\n    \"sizes\": \"(max-width: 1080px) 100vw, 1080px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"href\": \"https://www.instagram.com/p/BN-FHivhARj/?taken-by=lostarts\",\n    \"target\": \"_new\",\n    \"className\": \"image-caption\"\n  }, \"The wood shop side of Lost Arts\"), \"\\n  \")), mdx(\"p\", null, \"The second iteration of Lost Arts reopened in a recently vacated warehouse on Goose Island in 2016. The space was previously used as document storage for Pickens Kane, and had been purchased by R2 Property management\\u2013the same company that owned the lot that the first Lost Arts was on. The new space was absolutely massive, and provided a great place to explore what a coworking space would look like if you could also run a table saw in it.\"), mdx(\"p\", null, \"Out of all of my projects, this site has probably seen the most drastic changes over its lifetime. Charles has a drive to always make things better, and the website doesn\\u2019t escape that reach. We launched three major versions of the site as the space was evolving and expanding. The design always represented what Lost Arts was about at that particular moment, and it shipped with a water-tight custom fields and post types implementation that let our content editors easily update the site with very little fuss.\"), mdx(\"p\", null, \"Unfortunately Lost Arts closed its second iteration in the fall of 2018. I no longer run the website, and it is now updated to reflect the next phase of Lost Arts, whatever that may be. Here\\u2019s to hoping that it comes back somewhere in the near future\\u2013I\\u2019ve never found a better place to make work in Chicago.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"1200px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/136a0f9b15713bf9dd35c0da3531033a/b79a5/lost-arts-capture.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"390.33333333333337%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,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')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"The Lost Arts homepage during the second iteration\",\n    \"title\": \"The Lost Arts homepage during the second iteration\",\n    \"src\": \"/static/136a0f9b15713bf9dd35c0da3531033a/c1b63/lost-arts-capture.png\",\n    \"srcSet\": [\"/static/136a0f9b15713bf9dd35c0da3531033a/5a46d/lost-arts-capture.png 300w\", \"/static/136a0f9b15713bf9dd35c0da3531033a/0a47e/lost-arts-capture.png 600w\", \"/static/136a0f9b15713bf9dd35c0da3531033a/c1b63/lost-arts-capture.png 1200w\", \"/static/136a0f9b15713bf9dd35c0da3531033a/b79a5/lost-arts-capture.png 1372w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"The Lost Arts homepage during the second iteration\")), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;"}},"pageContext":{"slug":"/lost-arts/","previous":{"id":"6f52c710-a364-5197-ab08-77f878db0195","fields":{"slug":"/automating-donations-ifttt/"},"frontmatter":{"title":"Automating Donations with IFTTT and Qapital"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Automating Donations with IFTTT and Qapital\",\n  \"date\": \"2017-02-07T00:00:00-0500\",\n  \"teaser\": \"Automatically put money towards a donation every time something gets mentioned in the news.\",\n  \"featuredImage\": \"iftttDonationsScreenshot.jpg\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"One of the great trends that has come out of the past few years of technological advancement is the move towards simplifying previously complex tasks for folks who don\\u2019t want to write code. This simplification opens the door for people to use technology in new and inventive ways, spanning from DIY home automation all the way over to activism. I\\u2019d like to touch a bit on the activism side today.\"), mdx(\"p\", null, \"Supporting organizations like the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://aclu.org\"\n  }, \"ACLU\"), \" or the \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://splc.org\"\n  }, \"Souther Poverty Law Center\"), \" has been at the top of my list for quite some time, but actually donating always depended on me going to the site and filling out the form when I wanted to provide financial support. A recent conversation about donating every time something gets mentioned in the news spurred me to look for automation alternatives for this task.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"640px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/eeb9720670f18ad5ca5f033d494cf27a/c08c5/iftttDonationsScreenshot.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"75%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAQL/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABaujiJTCv/8QAGBAAAwEBAAAAAAAAAAAAAAAAAAERAiH/2gAIAQEAAQUCgxo6Q0o//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAFhAAAwAAAAAAAAAAAAAAAAAAABEg/9oACAEBAAY/ApR//8QAGhABAAIDAQAAAAAAAAAAAAAAAQARITFxYf/aAAgBAQABPyFZV6iCy9QVvDFD5UcTk5Kf/9oADAMBAAIAAwAAABA4D//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAECAQE/EGf/xAAbEAEAAwEBAQEAAAAAAAAAAAABABEhMUFRYf/aAAgBAQABPxBwXVxoyWJoYfT7cqww6QiiW8m08l+tJj0/YjAGlNcn/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Photo by 401(K) 2012\",\n    \"title\": \"Photo by 401(K) 2012\",\n    \"src\": \"/static/eeb9720670f18ad5ca5f033d494cf27a/c08c5/iftttDonationsScreenshot.jpg\",\n    \"srcSet\": [\"/static/eeb9720670f18ad5ca5f033d494cf27a/f93b5/iftttDonationsScreenshot.jpg 300w\", \"/static/eeb9720670f18ad5ca5f033d494cf27a/b4294/iftttDonationsScreenshot.jpg 600w\", \"/static/eeb9720670f18ad5ca5f033d494cf27a/c08c5/iftttDonationsScreenshot.jpg 640w\"],\n    \"sizes\": \"(max-width: 640px) 100vw, 640px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"href\": \"https://www.flickr.com/photos/68751915@N05/6281020696/in/photolist-az2SCh-bn4oq2-d3koK-7xFCXW-5QKWwC-aFAPtx-7xFvR7-fBsQs-f9ZEG-62QVKf-713m5r-659Rgz-aFDgrH-ad9aU-nTZJp-bjoEy4-ebifU-kyBTGB-fdHEa-6TjBCF-QxcaH-5FPV63-donZN-2abVs-s6895e-biaRHp-snzBqK-s4fksR-s61m4j-s61ncG-JCQG88-cNdyo-bu6pKh-s5ZdWJ-bu6sBd-snzAJp-s61ku3-skhAfL-smQwn4-rqLAHi-s688Fi-s684tk-pYSVGy-snzzza-snxbdk-s685Wv-vFBXwb-chEejy-aYWfHD-aFDkRt\",\n    \"target\": \"_new\",\n    \"className\": \"image-caption\"\n  }, \"Photo by 401(K) 2012\")), mdx(\"p\", null, \"I wanted something that didn\\u2019t require a lot of overhead to run, and something that could be easily updated as-needed. The obvious choice was to use IFTTT (If This Then That)\\u2013a plug-and-play service that drastically simplifies trigger-based actions.\"), mdx(\"h3\", null, \"You\\u2019ll need a few things to get started\"), mdx(\"p\", null, \"First things first, you\\u2019ll need a free IFTTT account to get up and rolling. Head over to \", mdx(\"a\", {\n    href: \"https://ifttt.com/join\",\n    target: \"_new\"\n  }, \"ifttt.com/join\"), \" to sign up. Once you\\u2019re signed up, you\\u2019re ready to create your first applet. \\u201CWait, applet sounds pretty \\u2018code-y\\u2019, and you said no code!\\u201D Regardless of the name, there is still no code involved in this\\u2013an applet is just a collection of actions that you want to take based on some event happening. What that event is listening for is up to you, and you have a ton of services that can tie into IFTTT that will help you create yours. Some fun examples are having \", mdx(\"a\", {\n    href: \"https://ifttt.com/applets/24908p-text-me-the-weather-every-morning\",\n    target: \"_new\"\n  }, \"IFTTT text you the weather on your way out every morning\"), \", or having \", mdx(\"a\", {\n    href: \"https://ifttt.com/applets/152298p-get-an-email-whenever-the-u-s-president-signs-a-bill-into-law\",\n    target: \"_new\"\n  }, \"ProPublica send you an e-mail every time the President signs a bill into law\"), \".\"), mdx(\"div\", {\n    \"className\": \"image-container half-image\"\n  }, \"\\n  \", mdx(\"div\", {\n    parentName: \"div\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"406px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/036cbe6b77145b251543fe524ac753a1/e33ef/iftttWeather.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"148.33333333333334%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEcElEQVRIx5VW2U5bVxR1XyqlUWMMHq/nEQ+AgQI2nm3AxiOGEAgByhySAI1CSKiiDmkfKlVtpaaqWvU3+gv5j/zK6t77cokNTtI8bN3je/ZdZ+21h2Pd+dcvUKk20F5axkL7tmqLF9b+f7Z4+w7mKlX8/uoP6CYTKfQZTLApTlisdlhtDlgsNphpbbY6Lp7vN5vdhRs39Wi1l6DLF2ZgJjCHPwiHNwCr3QclPAZPcBBujx9uevch8wUGMWCy4u7aBnSpfBF+YpXwBjHsCWBmwo3xlTVYJ+twOVxwEqjrA+bxBWEYMGPl7j3opgkwTKH9G4nidSmONz/E8fPzJD5r/wSv1w+n2/dxgHkC1JMO59EI/iwN4ZtqCM9flBDb2IJDcXV9+C7wLsAsAbKwCm0orKGLNPF5EfI64SIZrurVC7QLMJMrSpb4JQtrJOPs9psU+a1l0mi2wWRRLpl2AndrmM5iMDKEb797iVV6cXD/gaR/7d4G1tY3UZqt4MnpGU6fPqN6rQtLBuiUoGfIXNiPjk6wt39finR1bV3A640FWR+dPKYD19FvtAhbu9NzCdoFmMrk4A+GsU5JaLTaqNVb2Ds4xDEBcAdUa02ks3lU603UGi0BZfbRofgl6BXAvBTmg0fHOHx4JCy3d/axubWDs2fnaC4sotFs4+TxExwdf4V9Ouz7lz8iMZ2GlRpCk+Aa4MbmlrDgjznEzS+3hVF7cVk07us3UaiKhNuZlGshT6eyiMRGRPhd0o8ZMMuDw4fY2t7FX3//g1yhJJnXysbu8r4nKVQ2TJ03FIcbDnJmR35yOQ2NjIpegVCEmMYQjg4hFI6+u2xYcD65UJrFdDonbObKVeTyJYxPJMBJK5Tm5FmcKaNIa/bjhDABxeHpDcg1li/OgqdPlsDSpK0KMke1WAZHkiR58sUZMa4G9ivP1zAy+gVuGYxSx9QpBTkpEhuW0KZoPsbHJmQdHIyooYZjEi4nj/UO0W/NOGFcdtcYTiXTGB2fBGc9MZ0BdxCDabpyiNrzqnl8AQK0dHeKlsHOclBFD3zc+GJACw1Y3lBPdHeYRzLNLJ1uLzFUWapM3/r07OW3zh4qI7pXbDxlFAHi9ed6A/WxmQrcCL1hQN5pxj4S8qoAlmQs8UstBD6ZQRkgRVpu7+xhifqaM16p1qjHl4m1S8DYj/17MtQ0tNmdlwzZOZnKyIAYjo/ROo1EMgXlwoeNv+3qFNaQgdRCdQmgZtxFAyaLsDXR9cprNm1fIY05oQKohcyA2tDkzatZ7HV1du6pdXhRNtwRRrNVssknahf39Yy7JQJmrBn7M2seunrqlOU7q+oVwOEMx0epM8LUv1N0ql+06Q5dFT8QGhS/YCgML/05yOTyNOq28OmNm1heIcD46Dhu9fWL8L5AEBNTSQrFJ2ViGDBJmXSWijp9uE1HCDxMvV+iKtiFTvcJ6s0WdKdPzzAzV5bxX603aF3BfK1Od0mLBmyzw1qyX6b7Rmy+KoNhtlyhcpoV++XX3/Afcyyliu38aKcAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Weather Applet\",\n    \"title\": \"Weather Applet\",\n    \"src\": \"/static/036cbe6b77145b251543fe524ac753a1/e33ef/iftttWeather.png\",\n    \"srcSet\": [\"/static/036cbe6b77145b251543fe524ac753a1/5a46d/iftttWeather.png 300w\", \"/static/036cbe6b77145b251543fe524ac753a1/e33ef/iftttWeather.png 406w\"],\n    \"sizes\": \"(max-width: 406px) 100vw, 406px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"href\": \"https://ifttt.com/applets/24908p-text-me-the-weather-every-morning\",\n    \"target\": \"_new\",\n    \"className\": \"image-caption\"\n  }, \"Weather Applet\"), \"\\n  \"), \"\\n  \", mdx(\"div\", {\n    parentName: \"div\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"407px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/1e46edc025702a42f4aa6d202a0c8589/0ff56/iftttProPublica.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"159.33333333333334%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,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')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"ProPublica Applet\",\n    \"title\": \"ProPublica Applet\",\n    \"src\": \"/static/1e46edc025702a42f4aa6d202a0c8589/0ff56/iftttProPublica.png\",\n    \"srcSet\": [\"/static/1e46edc025702a42f4aa6d202a0c8589/5a46d/iftttProPublica.png 300w\", \"/static/1e46edc025702a42f4aa6d202a0c8589/0ff56/iftttProPublica.png 407w\"],\n    \"sizes\": \"(max-width: 407px) 100vw, 407px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"href\": \"https://ifttt.com/applets/152298p-get-an-email-whenever-the-u-s-president-signs-a-bill-into-law\",\n    \"target\": \"_new\",\n    \"className\": \"image-caption\"\n  }, \"ProPublica Applet\"), \"\\n  \")), mdx(\"p\", null, \"The next part that you\\u2019ll need is a \", mdx(\"a\", {\n    href: \"https://www.qapital.com/\",\n    target: \"_new\"\n  }, \"Qapital\"), \" account, which you\\u2019ll need to sign up for via your smartphone. Qapital is a very similar service to IFTTT, but it integrates with your bank account to help automate your savings. I have an applet running on there than automatically rounds up to the nearest dollar for every one of my debit card purchases, and then puts that money  into a vacation savings account. Once you\\u2019ve set up a Qapital account, you\\u2019ll need to connect your bank account to it. This will be the account that it draws out of to put money towards your donation.\"), mdx(\"h4\", null, \"Creating a donation Qapital goal\"), mdx(\"p\", null, \"Now that you\\u2019re up and running on Qapital, you\\u2019ll need to set up a goal for your target donation. I started with $50 towards the ACLU, but you can do this for any cause or savings goal. This is probably a good time to point out that you don\\u2019t have to use this for donation purposes\\u2013this would also be great if you\\u2019re just trying to control your savings a little more.\"), mdx(\"h4\", null, \"Connect IFTTT to Qapital\"), mdx(\"p\", null, \"Jump back over to IFTTT, and then go to the \", mdx(\"a\", {\n    href: \"https://ifttt.com/qapital\",\n    target: \"_new\"\n  }, \"Qapital Service page on IFTTT\"), \". Click connect, and then log in with your Qapital account. Just like that, you\\u2019re ready to create your first applet with Qapital and IFTTT.\"), mdx(\"h4\", null, \"Find your news source\"), mdx(\"p\", null, \"We need a concise text-based source to \\u201Clisten\\u201D to in order for this applet to run. I chose to use the \", mdx(\"a\", {\n    href: \"http://rss.cnn.com/rss/cnn_allpolitics.rss\",\n    target: \"new\"\n  }, \"RSS feed from CNN Politics\"), \". We\\u2019ll stick with RSS feeds for this tutorial\\u2013keep in mind that you can use any RSS feed you find. What we\\u2019ll be doing is listening for a specific word in the feed that will trigger our applet to run. Once you\\u2019ve found your RSS feed, head back over to input your feed\\u2019s details in IFTTT.\"), mdx(\"h4\", null, \"Creating your first applet\"), mdx(\"div\", {\n    className: \"paragraph-with-picture\"\n  }, mdx(\"p\", null, \"Click \", mdx(\"a\", {\n    href: \"https://ifttt.com/create\",\n    target: \"_new\"\n  }, \"New Applet\"), \" on IFTTT to start building your first applet. The formula is as simple as the name\\u2013if \\\"this,\\\" then \\\"that.\\\" For the \\\"this\\\" side, we'll be using IFTTT's RSS service. Click \\\"this\\\" and select the orange \\\"feed\\\" icon. We're listening for a word, so select \\\"New feed item matches.\\\" Here, you'll input whatever word you want to listen for, and the link to the RSS feed that it will pull from. Keep in mind that this will only be looking at the headline and a quick intro to the story, so you'll want to keep your trigger word short and specific.\"), mdx(\"div\", {\n    \"className\": \"image-container small-image\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"359px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/28276ff97dda755bc284a2f2c3553ce0/f5eb6/iftttFeedIcon.png\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"99.66666666666667%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAACGElEQVQ4y2N4V8rwHxm/LcHOJhYzYDeQ8f+7cpb/78qYIWwSDGfAZtjbAob/b7KAOAcoVggUK2MCYkaiDEVzIcSwT7Nc/3/b0/T/88KA/++bxP+/zYUZzAw2FJ/BqAaWM/9/k83w//uh/v8w8O/Pz/8/Tsz4/75ZCmwwIUMxw7CY4f/7RtH/H6dY/v+6pfj/n9e3IQZ///D/0xwPFEOJ8zLQax+nWP3/sirx/4dWWTD/y9o0uIsJGYrdywe64Qb8vLQaHCGfptvDXfq+RQoSptAUQNDLH9oU/n9eHPL/142tYEP+vLsPlvu6LhPMB4UpzJXEJZtciMEg+tvWMohLLywHu+rPm7v///3+AYx9CayuRHUhML29zQclG2ew136cnvf/LTAt/rq5A2woKAl921YOZn+e74vVlWgGMoMT89eN+WBNfz8+/f82Dxgpy2PA/C8rE4CWuYDZ3/a2gsMbv4HQMHxXyf7/y5rU/x8nGoMNBMX2t10N/z9OMAQnqW87a/9/mmZL2MuwZAAyFGQ7PCyBGt+kM4ANB2fLTAZw0IDDu4SYwgEUlqDY7tECusoI6GKO/+9qeICuE///oVMVoqacmHSIHDl5DODw+rI66f+37ZXAcM0D05/neYPlwAVGKbEGwlwKKsKA+H298P/3tfz/3zeI/H9XxQUJZ2LLQ5SwhBYCb4ugYQml8ZWP+F1IhhwDqUU8IQwAAgr+jOYJqckAAAAASUVORK5CYII=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"IFTTT Feed Icon\",\n    \"title\": \"IFTTT Feed Icon\",\n    \"src\": \"/static/28276ff97dda755bc284a2f2c3553ce0/f5eb6/iftttFeedIcon.png\",\n    \"srcSet\": [\"/static/28276ff97dda755bc284a2f2c3553ce0/5a46d/iftttFeedIcon.png 300w\", \"/static/28276ff97dda755bc284a2f2c3553ce0/f5eb6/iftttFeedIcon.png 359w\"],\n    \"sizes\": \"(max-width: 359px) 100vw, 359px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n    \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"IFTTT Feed Icon\"), \"\\n  \")), mdx(\"p\", null, \"Now that you\\u2019ve got the \\u201Cthis\\u201D side down, we\\u2019ll tackle the \\u201Cthat\\u201D side. Click on \\u201Cthat\\u201D and choose your Qapital service. Since this is on the action side, we only have one action available\\u2013save towards a goal. This will pull in your list of goals from Qapital. Choose the goal that you set up to save towards your donation. You can choose how much you\\u2019d like to save towards your goal every time the applet runs.\"), mdx(\"p\", null, \"$1 is a great place to start out if you\\u2019re concerned about this getting out of hand, but remember, the applet will only run until you hit the goal that you set in Qapital. For instace, if you set a $10 goal of saving a dollar towards a donation to the \", mdx(\"a\", {\n    href: \"http://www.ctunet.com/\",\n    target: \"_new\"\n  }, \"Chicago Teachers Union\"), \" every time Betsy DeVos gets mentioned in the news, you would quickly hit your limit on a high-traffic day like today, when she was successfuly appointed by the Senate. No need to worry, though, once you hit your goal, your applet will stop running automatically.\"), mdx(\"h3\", null, \"Now actually donate the money\"), mdx(\"p\", null, \"Automation like this is great because it never sleeps or misses an important news story. Unfortunately, we still have one human-involved step in this process to get the money to the place that you\\u2019d like to donate. Once you reach your goal in Qapital, you\\u2019ll need to transfer the money over to your bank account and then actually make the donation yourself. This definitely isn\\u2019t ideal, but it\\u2019s a step in the right direction to regularly donating.\"), mdx(\"h4\", null, \"Next steps and improvements\"), mdx(\"p\", null, \"I\\u2019d love to see a way for IFTTT to automatically make that donation for you, but as of now I haven\\u2019t found a way to do that. Qapital is a great service to build your savings, but the money does sit in a Well Fargo account until you actively move it out. The upside of this is that your savings are FDIC-insured, the downside is that it\\u2019s through \", mdx(\"a\", {\n    href: \"https://en.wikipedia.org/wiki/Wells_Fargo#Controversies\",\n    target: \"_new\"\n  }, \"Wells Fargo, a historically shady bank\"), \". Because of this, I would suggest moving the money out ASAP after you\\u2019ve hit your goal. This can also be aided by setting smaller goals and donating more frequently. Qapital makes their money by keeping your funds in that account and accruing interest on them while it\\u2019s there, so really it\\u2019s in your best interest (har har) to move it to your own interest-accruing account frequently. The tricky bit is that they won\\u2019t let you transfer until you\\u2019ve hit your goal\\u2013if you decide that you want to move the money before you\\u2019ve reached your goal, you can edit the goal to match whatever amount you have in the account, and then go ahead and transfer it. Is it perfect? No. Is it a step in the right direction? I hope so.\"));\n}\n;\nMDXContent.isMDXComponent = true;"},"next":{"id":"e15c7deb-13da-5f76-abdc-43cd48241b5e","fields":{"slug":"/ansible-pi/"},"frontmatter":{"title":"Headless Raspberry Pi Startup with Ansible"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Headless Raspberry Pi Startup with Ansible\",\n  \"date\": \"2017-04-12T00:00:00-0500\",\n  \"teaser\": \"Get your Pi up and ready to go with a few short commands and an Ansible playbook.\",\n  \"featuredImage\": \"ansible-pi.jpg\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Getting started on a Raspberry Pi can be a little daunting if you\\u2019re brand new to working with the board. The easiest route is to get a monitor and a spare mouse and keyboard to get everything set up, but there are plenty of times when you aren\\u2019t going to have access to all of those components. If you\\u2019re sitting there with a Pi and wondering how to get set up, this post will help you get the ball rolling. This kind of setup refers to running the Pi \\u201Cheadless\\u201D, which is just a fancy way to say running it without a monitor.\"), mdx(\"p\", null, \"We\\u2019ll walk through the basic steps to get SSH set up, and then we\\u2019ll move on to the fun stuff\\u2013configuring your Pi via Ansible.\"), mdx(\"div\", {\n    \"className\": \"image-container large-image\"\n  }, \"\\n  \", mdx(\"span\", {\n    parentName: \"div\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"640px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/05ffe39d722e55651f106f8bb88e2027/c08c5/ansible-pi.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"75%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIBBf/EABUBAQEAAAAAAAAAAAAAAAAAAAEA/9oADAMBAAIQAxAAAAHnToSkf//EABgQAQEBAQEAAAAAAAAAAAAAAAEAIRIi/9oACAEBAAEFAvMHSOWiF//EABcRAAMBAAAAAAAAAAAAAAAAAAEQEUH/2gAIAQMBAT8BMxf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAZEAACAwEAAAAAAAAAAAAAAAABEQAQIQL/2gAIAQEABj8C1xci8Kr/xAAaEAADAQEBAQAAAAAAAAAAAAAAARExIWFx/9oACAEBAAE/IUmkVewdqJS1Ed+m5zeHHWf/2gAMAwEAAgADAAAAEOTv/8QAFxEAAwEAAAAAAAAAAAAAAAAAARARIf/aAAgBAwEBPxAJFav/xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAgEBPxAJ/8QAHRABAQACAwADAAAAAAAAAAAAAREAITFBYXGxwf/aAAgBAQABPxCwTW4489xRQFu8B+9fLj7kr2mSmB6wopo1zjf3hS7FV33n/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Raspberry Pi & Ansible\",\n    \"title\": \"Raspberry Pi & Ansible\",\n    \"src\": \"/static/05ffe39d722e55651f106f8bb88e2027/c08c5/ansible-pi.jpg\",\n    \"srcSet\": [\"/static/05ffe39d722e55651f106f8bb88e2027/f93b5/ansible-pi.jpg 300w\", \"/static/05ffe39d722e55651f106f8bb88e2027/b4294/ansible-pi.jpg 600w\", \"/static/05ffe39d722e55651f106f8bb88e2027/c08c5/ansible-pi.jpg 640w\"],\n    \"sizes\": \"(max-width: 640px) 100vw, 640px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\"\n  }), \"\\n  \"), \"\\n    \"), \"\\n  \", mdx(\"a\", {\n    parentName: \"div\",\n    \"className\": \"image-caption\"\n  }, \"Raspberry Pi & Ansible\")), mdx(\"h3\", null, \"Getting your Pi ready\"), mdx(\"p\", null, \"Let\\u2019s start by discussing how to get the Raspbian image on the SD card. We\\u2019ll be using the Raspbian Jessie with Pixel distro for this project. Head over to \", mdx(\"a\", {\n    href: \"https://www.raspberrypi.org/downloads/noobs/\",\n    target: \"_new\"\n  }, \"raspberrypi.org\"), \" to grab the latest Raspbian download. At the time of this post, the latest version is 4.4, but this should work for pretty much any version. If you can download torrents on your network, the torrent option for downloading the Raspbian distro is trusted and significantly faster than downloading the ZIP file.\"), mdx(\"p\", null, \"I\\u2019ll be using a Mac for this tutorial, and a few of the tools we\\u2019ll use to make this work are only available for Mac, to my knowledge. While you\\u2019re waiting for Raspbian to download, head over and download two additional programs that we\\u2019ll need to flash the card. The first is \", mdx(\"a\", {\n    href: \"https://www.sdcard.org/downloads/formatter_4/\",\n    target: \"_blank\"\n  }, \"SD Card Formatter\"), \" from the SD Association. We\\u2019ll use this to prep our card for imaging. The second is \", mdx(\"a\", {\n    href: \"https://www.tweaking4all.com/software/macosx-software/macosx-apple-pi-baker/\",\n    target: \"_new\"\n  }, \"Apple Pi Baker\"), \", a tool that makes managing your Pi disk images as easy as\\u2026pi. Sorry.\"), mdx(\"p\", null, \"Let\\u2019s format our SD card first. Open SD Formatter and choose the \\u201CQuick Format\\u201D option. Make sure you have the right card selected\\u2013unless you have any other external media plugged in, the only option should be the micro SD that you\\u2019ll use for your Pi. Click format and you should be good to go.\"), mdx(\"p\", null, \"When your Raspbian download has finished, you need to unzip it get access to the .img file. If you double-click the file and use Mac\\u2019s native Archive Utility, the ZIP file will unpack to a .cpgz file, which we don\\u2019t want. Instead of using Archive Utility, you need to use something like \", mdx(\"a\", {\n    href: \"http://unarchiver.c3.cx/unarchiver\",\n    target: \"_new\"\n  }, \"The Unarchiver\"), \" to extract the .img file from the ZIP. Once you have the .img file, we\\u2019re ready to make a few edits to the image that will help us with our setup.\"), mdx(\"p\", null, \"Double-click the Raspbian .img file to boot the drive. We\\u2019ll get into this new drive to edit and create a few files. When you see the booted drive on your Mac (likely called boot), open a new terminal window. We need to tell the terminal what we\\u2019d like to edit, and the easiest way to do this is to type \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"cd\"), \"\\u201D for \\u201Cchange directory\\u201D, and then drag the boot disk onto the terminal window\\u2013this will autofill the path for us. Hit enter to change the directory, and then type \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ls -a\"), \"\\u201D to show all the files in the directory.\"), mdx(\"h3\", null, \"Enabling SSH on the boot disk\"), mdx(\"p\", null, \"Due to a security problem a few months back, \", mdx(\"a\", {\n    href: \"https://www.raspberrypi.org/blog/a-security-update-for-raspbian-pixel/\",\n    target: \"_new\"\n  }, \"the Raspberry Pi Foundation made the decision to not enable SSH by default on new Raspbian images\"), \". This is an incredibly smart move as you don\\u2019t want SSH enabled with the default username and password\\u2013people who don\\u2019t change it were leaving their Pi\\u2019s open to a world of hurt. We\\u2019re going to re-enable it with the knowledge that we\\u2019ll be changing our password from the default as soon as we boot up. To enable SSH, you\\u2019ll need to create a blank file in the boot disk called \\u201CSSH\\u201D. To do this, run \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sudo touch ssh\"), \"\\u201D in your terminal window that\\u2019s pointed at the boot disk.\"), mdx(\"h3\", null, \"Configuring wi-fi on the boot disk\"), mdx(\"p\", null, \"SSH isn\\u2019t much good to us without a network connection. To make sure that we\\u2019re able to connect to wi-fi, we need to add a wpa_supplicant.conf file to our boot disk. Run \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sudo nano wpa_supplicant.conf\"), \"\\u201D in your terminal. This will open a nano editor that will let you write code in the terminal. For our power users out there, feel free to use whatever editor you\\u2019d like (looking at you, Vim/Emacs folks). We need to add the following code to this file to connect to a network. You\\u2019ll need to replace the \\u201CYOUR_NETWORK_NAME\\u201D and \\u201CYOUR_NETWORK_PASSWORD\\u201D with the appropriate credentials for your network. Once you\\u2019re done editing the file in nano, hit \\u201Cctrl+x\\u201D to exit, and then \\u201CY\\u201D to save.\"), mdx(\"div\", {\n    \"className\": \"gatsby-highlight\",\n    \"data-language\": \"javascript\"\n  }, mdx(\"pre\", {\n    parentName: \"div\",\n    \"style\": {\n      \"counterReset\": \"linenumber NaN\"\n    },\n    \"className\": \"language-javascript line-numbers\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"network\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token operator\"\n  }, \"=\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"{\"), \"\\n  ssid\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token operator\"\n  }, \"=\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token string\"\n  }, \"\\\"YOUR_NETWORK_NAME\\\"\"), \"\\n  psk\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token operator\"\n  }, \"=\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token string\"\n  }, \"\\\"YOUR_NETWORK_PASSWORD\\\"\"), \"\\n  key_mgmt\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token operator\"\n  }, \"=\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token constant\"\n  }, \"WPA\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token operator\"\n  }, \"-\"), mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token constant\"\n  }, \"PSK\"), \"\\n\", mdx(\"span\", {\n    parentName: \"code\",\n    \"className\": \"token punctuation\"\n  }, \"}\")), mdx(\"span\", {\n    parentName: \"pre\",\n    \"aria-hidden\": \"true\",\n    \"className\": \"line-numbers-rows\",\n    \"style\": {\n      \"whiteSpace\": \"normal\",\n      \"width\": \"auto\",\n      \"left\": \"0\"\n    }\n  }, mdx(\"span\", {\n    parentName: \"span\"\n  }), mdx(\"span\", {\n    parentName: \"span\"\n  }), mdx(\"span\", {\n    parentName: \"span\"\n  }), mdx(\"span\", {\n    parentName: \"span\"\n  }), mdx(\"span\", {\n    parentName: \"span\"\n  })))), mdx(\"h3\", null, \"Writing the image\"), mdx(\"p\", null, \"We\\u2019ve got our two pieces of the boot disk that needed editing ready, so now we can move on to actually writing the image to the card.\"), mdx(\"p\", null, \"You can start by ejecting the \\u201Cboot\\u201D disk image\\u2013we won\\u2019t need that anymore. Next, open Pi Baker and select the SD card that you just formatted. We\\u2019re going to use the \\u201Crestore backup\\u201D function to write the .img file to the card. Locate the raspbian-jessie.img file that you downloaded, and select it in the \\u201Crestore backup\\u201D section of Pi Baker. After you have the selected, click \\u201CRestore Backup\\u201D. This process took around eight minutes to complete, but your mileage will vary based on your computer and the size of your SD card.\"), mdx(\"h3\", null, \"Firing up your Pi\"), mdx(\"p\", null, \"Now that the card is ready to go with the Raspbian image, we can go ahead and power it on! Plug your Pi in, then open a new terminal window on your Mac. We\\u2019ll try one command to SSH in first, and we\\u2019ll have a backup for anyone who that doesn\\u2019t work for. Depending on your network, you may be able to address the Pi as \\u201Craspberrypi.local\\u201D. To give this a shot, type \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ssh raspberrypi.local -l pi\"), \"\\u201D into your terminal and hit enter. If it asks you about wanting to add the fingerprint, congrats, it worked\\u2013type \\u201Cyes\\u201D and then hit enter to accept. After that, enter the default password of \\u201Craspberry\\u201D. If you get something along the lines of \\u201CCould not resolve hostname raspberrypi.local\\u201D, that probably means that your network isn\\u2019t going to let us address the Pi with the shortname, provided you got the rest of the steps right. We have a few options to figure out the IP address of the Pi so we can SSH in, the easiest of which is accessing the network router for your wi-fi. Log in to your router\\u2019s control panel, look for connected devices, and make a note of the IP address associated with the hostname \\u201Craspberry\\u201D. If you don\\u2019t have access to your router, you can follow \", mdx(\"a\", {\n    href: \"https://www.raspberrypi.org/documentation/remote-access/ip-address.md\",\n    target: \"_new\"\n  }, \"these instructions from raspberrypi.org\"), \" to find your IP using other methods. Once you have your Pi\\u2019s IP address, type \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ssh YOUR_PI_IP_ADDRESS -l pi\"), \"\\u201D and follow the previous instruction to log in with the default credentials.\"), mdx(\"h3\", null, \"Changing your password\"), mdx(\"p\", null, \"The absolute first thing that we need to do is change the default password. The easiest way to change the password is through \\u201Craspi-config\\u201D, which you can access by typing \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sudo raspi-config\"), \"\\u201D in your SSH terminal. Hit enter to select \\u201CChange User Password\\u201D, then enter your password. Back at the raspi-config window, hit tab twice to select \\u201CFinish\\u201D, then hit enter. The username \\u201Cpi\\u201D is now associated with whatever password you just set.\"), mdx(\"h3\", null, \"On to Ansible\"), mdx(\"p\", null, \"Ansible is an automation tool that lets us easily script a series of actions that we\\u2019d like to take place on our Pi. It\\u2019s big in the devops world, and it\\u2019s easy to see why\\u2013Ansible is relatively easy to get up and running compared to its alternatives. Its ease-of-use makes it a perfect candidate to set up a Pi.\"), mdx(\"p\", null, \"I created an Ansible Playbook to group all of our actions\\u2013you can \", mdx(\"a\", {\n    href: \"https://github.com/justinisamaker/ansible-pi\",\n    target: \"_new\"\n  }, \"clone it from my Github.\"), \" A playbook, in Ansible parlance, is just a collection of actions and the things that they need in order to run. Start by cloning the repo to your main computer. Once you have the repo cloned, open up the \\u201Chosts\\u201D file in your code editor. You\\u2019ll need to replace the \\u201CYOUR_PI_IP_HERE\\u201D and \\u201Cansible_user\\u201D/\\u201Cansible_password\\u201D sections with, you guessed it, your Pi\\u2019s IP and your username and password. If you forgot your IP from earlier, or if you didn\\u2019t have to get it because \\u201Craspberrypi.local\\u201D worked, you can just type \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ifconfig\"), \"\\u201D in your SSH window and find the IP address listed under WLAN0 if you\\u2019re connected to the wifi. Enter your Pi\\u2019s IP and login information in the hosts file, then save.\"), mdx(\"h3\", null, \"Breaking down the Ansible tasks\"), mdx(\"p\", null, \"The actions that we\\u2019ll be taking on our Pi are all located in the \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"/roles/common/files\"), \"\\u201D section of the Ansible-Pi repo you just cloned. These are fairly opinionated to what I use the Pi for, but the beauty of open source is that they\\u2019re all editable, so you can adjust them to your liking. Let\\u2019s walk through what each .sh file does:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"anti-raspbian-bloat: Removes packages that I don\\u2019t want on every installation, removes unused folders in /home/pi\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"configure-locale: Changes the locale from en_GB to en_US\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"set-keyboard-layout: Changes the keyboard layout from GB to US\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"set-timezone: Sets the timezone to \\u201CAmerica/Chicago\\u201D\")), mdx(\"p\", null, \"You can edit any of these files to better reflect your locale. If you\\u2019re comfortable with using English for the Pi and you\\u2019re located in the United States, all you should have to update is the timezone file.\"), mdx(\"p\", null, \"The next piece that we\\u2019ll look at is the actual list of tasks, which you can find in \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"/roles/commons/tasks/main.yml\"), \"\\u201D. Let\\u2019s break that routine down:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Transfer init scripts: Moves everything from \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"/roles/common/files\"), \"\\u201D into your Pi\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Thin out Raspbian: Deletes unnecessary files/directories\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Upgrade apt cache: Makes sure we have the latest packages\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Upgrade dist: Step two of making sure our packages are up-to-date\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Configure locale\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Set timezone\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Set keyboard layout\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Install packages: Use this to install any packages you want to that you would usuall install with \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"apt-get-install\"), \"\\u201D. Right now I just have it set up to install TightVNC.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Reboot: restart the Pi to make sure our changes are applied\")), mdx(\"p\", null, \"Before we run this, you\\u2019ll need to install Ansible on your Mac. You can do this through \", mdx(\"a\", {\n    href: \"https://brew.sh/\",\n    target: \"_new\"\n  }, \"Homebrew\"), \" by running \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"brew install ansible\"), \"\\u201C.\"), mdx(\"p\", null, \"Now we\\u2019re on to the good stuff\\u2013actually running our playbook! On your Mac\\u2019s terminal, navigate to the folder that you cloned ansible-pi to, then run \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ansible-playbook -s -i hosts ansible-pi.yml\"), \"\\u201D. This tells Ansible to run our root playbook with sudo access using the hosts file from the repo. You should see the task names start to read out to your terminal. For a brand new Pi, each task should say the task name, and then a status message that should read \\u201Cchanged: YOUR_PI_IP_ADDRESS\\u201D. The only task that should fail is the final reboot task\\u2013the Pi will already be rebooting, so it can\\u2019t report back that the task finished successfully.\"), mdx(\"h3\", null, \"Making sure it worked\"), mdx(\"p\", null, \"After you\\u2019ve run the ansible playbook, SSH back into your Pi. If you type \", \"\\u201C\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ls\"), \"\\u201D in the home directory, you should only see the init folder that we transferred over. That means that your configuration worked, and you should be good to start using your Pi!\"));\n}\n;\nMDXContent.isMDXComponent = true;"}}},"staticQueryHashes":["3128451518"]}