{
    "componentChunkName": "component---src-templates-blog-js",
    "path": "/articles",
    "result": {"data":{"site":{"siteMetadata":{"title":"your friend Joel's digital garden","description":"Articles and notes from a collaborator at egghead.io. Musings on software, business, and life from a skilled virtual assistant.","author":{"name":"Joel Hooks"},"keywords":["Video Blogger"]}},"allMdx":{"edges":[{"node":{"excerpt":"Hi there 👋 My name is Joel Hooks. I'm a skilled virtual assistant, software developer, and a collaborator at  egghead.io . This is my personal site where I drop notes and articles about things that I am interested in. Generally speaking this journal will capture thoughts I have about building…","id":"ca8a3e7b-1d38-5ad5-9b65-93481f38b291","fields":null,"parent":{"sourceInstanceName":"pages"},"frontmatter":{"title":"","date":null,"banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Twitter has been my online home since 2008. I've written ~50,000 tweets, chronicled the progression through multiple careers, made countless friends, and leveraged the network to build a business that has generated well over $30,000,000 in revenue. To say Twitter has been an important part of my…","id":"fe1e16e7-dd8d-52bb-9d72-3b5cbd054352","fields":{"title":"15 Years of Twitter vs That One Rich Asshole","slug":"15-years-of-twitter-vs-that-one-rich-asshole","date":"2022-11-18T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"15 Years of Twitter vs That One Rich Asshole","date":"November 18, 2022","banner":null,"slug":"15-years-of-twitter-vs-that-one-rich-asshole","keywords":null}}},{"node":{"excerpt":"After  15 years on Twitter  recent events have me strongly considering other venues for my positive and optimistic updates to like-minded folks. Mastodon has seen a strong boost in utility recently as a solid replacement to Twitter. I'm giving it a try,  find me here on Hachyderm instance . Choosing…","id":"11a06fb9-c10b-5cef-b8ad-46c643437215","fields":{"title":"Mastodon as a Replacement for Twitter","slug":"mastodon-as-a-replacement-for-twitter","date":"2022-11-18T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Mastodon as a Replacement for Twitter","date":"November 18, 2022","banner":null,"slug":"mastodon-as-a-replacement-for-twitter","keywords":null}}},{"node":{"excerpt":"These are notes about my personal setup for a new macOS computer. Some of the\ninstructions might be incorrect for your environment Getting Started You'll need several things installed on your machine to proceed with configuring\nzsh beyond the defaults. Xcode Command Line Tools: just run  xcode…","id":"89685b70-d369-5763-baec-c1d8f9b5f248","fields":{"title":"Basic zsh Developer Shell Setup for a New M1 Mac","slug":"zsh-setup","date":"2021-11-28T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Basic zsh Developer Shell Setup for a New M1 Mac","date":"November 28, 2021","banner":null,"slug":"zsh-setup","keywords":null}}},{"node":{"excerpt":"There are a lot of interesting options for commercial and open source players. In the last several years  HTMLVideoElement  has become cross platform standard and simplified media player development considerably. No Flash fallback required! Despite the availability of a standard approach for loading…","id":"ca686418-fb04-523c-92f9-e173aa570b47","fields":{"title":"React Video Player Component Using Hooks, TypeScript, and xState","slug":"react-video-player","date":"2021-09-10T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"React Video Player Component Using Hooks, TypeScript, and xState","date":"September 10, 2021","banner":null,"slug":"react-video-player","keywords":null}}},{"node":{"excerpt":"If you want to launch a course, project, e-commerce store, or some other product there are a shit load of services on the internet that you can fire up, add your credit card details, and be off to the races. Seems simple!  These products are tuned for the masses, the least common denominator and…","id":"4a1a3f0e-b58c-57e3-bf2e-2afdfe4f86d4","fields":{"title":"Collaboration on a Product with a Partner","slug":"product-collaboration","date":"2021-08-01T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Collaboration on a Product with a Partner","date":"August 01, 2021","banner":null,"slug":"product-collaboration","keywords":null}}},{"node":{"excerpt":"This video from Jay Abraham is a great introduction to the strategy of preeminence. We are not a commodity. There are two forces trying to turn us into a commodity. Our competition wants to marginalize our advantage & differentiation. Consumers want this too. If we accept this, we are a generic…","id":"7097dcd4-1831-5786-8f39-f070ba832f42","fields":{"title":"Strategy of Preeminence","slug":"strategy-of-preeminence","date":"2021-08-01T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Strategy of Preeminence","date":"August 01, 2021","banner":null,"slug":"strategy-of-preeminence","keywords":null}}},{"node":{"excerpt":"I split this into two campaigns and multiple segments for clarity.  This lets me loop through the logic instead of \"stacking\" a bunch of repetition in a single campaign. I'm not sure if this is technically fine in CIO and haven't tested it yet. Course: Emailing  and  Course: Progress Course…","id":"0fc02c22-ae07-58ca-81fb-16bbba574811","fields":{"title":"Self-Paced Email Course in Customer.io","slug":"self-paced-email-course-customerio","date":"2021-04-16T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Self-Paced Email Course in Customer.io","date":"April 16, 2021","banner":null,"slug":"self-paced-email-course-customerio","keywords":null}}},{"node":{"excerpt":"The Video.js docs have a good explaination for using Video.js with React, but it focuses on a class based implementation. Getting Video.js to consistently work with React Hooks is fairly straight forward, with a gotcha or two. Here's the hook: The hook returns the  Video  component, which is…","id":"b77ac617-766f-53f5-b7fa-b70a8fad9720","fields":{"title":"useVideoJs: a React Hooks for Video.js","slug":"usevideojs-a-react-hooks-for-videojs","date":"2021-03-26T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"useVideoJs: a React Hooks for Video.js","date":"March 26, 2021","banner":null,"slug":"usevideojs-a-react-hooks-for-videojs","keywords":null}}},{"node":{"excerpt":"If you want to generate a (pseudo) random number using a Liquid filter in  Convertkit , here's the code: What's actually going on here? This is a complex liquid template, so let's break it down, starting from the right and working our way left. using modulo in liquid The  modulo  of a number is the…","id":"02611702-40fa-5b7d-a03e-774f4d2c3f19","fields":{"title":"Using a Random Number to Segment Emails in ConvertKit Automations using Liquid","slug":"random-number-convertkit-liquid","date":"2021-03-09T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Using a Random Number to Segment Emails in ConvertKit Automations using Liquid","date":"March 09, 2021","banner":null,"slug":"random-number-convertkit-liquid","keywords":null}}},{"node":{"excerpt":"Tools like  Convertkit  provide a lot of powerful tools you can use for marketing automation, but as a developer I want to goa layer deeper and find that using serverless functions with a framework like Next.js provides immense power to customize automation. In  this episode of Learn with Jason , I…","id":"c40958ff-ffc8-568d-916b-02b2214fdde1","fields":{"title":"Serverless Marketing Automation with Convertkit and Next.js","slug":"serverless-marketing-automation","date":"2021-02-17T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Serverless Marketing Automation with Convertkit and Next.js","date":"February 17, 2021","banner":null,"slug":"serverless-marketing-automation","keywords":null}}},{"node":{"excerpt":"Over the last few years, we've done  a lot  of  React . Which is great. I love using React personally, and building  egghead-next  using Next.js and TypeScript has been fantastic. This year we'd like to give some of the other great frameworks and tools the stage while continuing to help folks learn…","id":"58e37861-9594-58a9-a764-405a25e1d9f5","fields":{"title":"What to Teach Web Developers in 2021","slug":"what-to-teach-web-developers-in-2021","date":"2021-01-08T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"What to Teach Web Developers in 2021","date":"January 08, 2021","banner":null,"slug":"what-to-teach-web-developers-in-2021","keywords":null}}},{"node":{"excerpt":"There are many reasons to create a portfolio as a software developer. You might be new to the career and need a way to represent your capabilities. You might have worked exclusively at companies that firewall your work examples behind non-disclosure agreements (NDAs) that protect their intellectual…","id":"1032c167-8f05-546b-8d1f-a171d3da3e5d","fields":{"title":"Crafting a Business Oriented Developer Portfolio that Stands Out","slug":"developer-portfolio","date":"2020-12-08T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Crafting a Business Oriented Developer Portfolio that Stands Out","date":"December 08, 2020","banner":null,"slug":"developer-portfolio","keywords":null}}},{"node":{"excerpt":"Over the years egghead has evolved from my good friend John Lindquist making  the  goto screencasts on Angular.js into a platform for technical content creators to produce and publish high-quality courses for a broad audience of web developers. When we first started, things were simple 😅 Over time…","id":"75bf5731-3a1a-5230-af74-30d58d2b1f0c","fields":{"title":"how we iterate and collaborate with creators at egghead","slug":"collaborate","date":"2020-12-07T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"how we iterate and collaborate with creators at egghead","date":"December 07, 2020","banner":null,"slug":"collaborate","keywords":null}}},{"node":{"excerpt":"This is an initialism I picked up from my good friend Alex Hillman. What JFDI really means I got it tattooed on my wrist with Alex's permission 😅","id":"672369cd-ec56-5597-a41d-0aeab0b6c9f2","fields":{"title":"Just Fucking Do It","slug":"jfdi","date":"2020-12-07T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Just Fucking Do It","date":"December 07, 2020","banner":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20120v120l3%201%2012%204c14%205%2023%206%2024%201%201-1-1-8-2-9-2-2-1-5%201-5%203%200%2015%2015%2015%2020l-4%201c-12%200%202%208%2015%209%2012%201%2012%200-1-22-4-7-3-8%204-8%207-1%208%200%208%205%200%203%205%2012%206%2012l2%204%201%203%205%2010v3l-5-1h-6c0%202%205%205%2011%207%205%202%205%201%2011%2020l4%2010v6l1%203c2-1%203%206%202%2010-1%202-1%202-2%201l-1-2c-1%201-4%200-8-3l-17-8-4-3-17-9-3-2-9-6a828%20828%200%2001-33-14l-11-4c-2%200-2%200-2%208l1%208%206%204%207%204%2011%208c5%205%2013%208%2023%2010a74%2074%200%200128%2010c6%204%2014%2010%2022%2018l8%208c2%200%209%2015%207%2016l-1%203v4l-2-4c-1-3-2-4-2-2-1%201-2%201-4-3-5-7-10-5-7%204%204%2010%205%2021%201%2018l-5-10-1-2-2%207c1%203-2%205-5%203l-3-2-2-1-2-2-2-3-2-2c-6%200-12-5-16-13l-3-5a3984%203984%200%2000-12-17%20148%20148%200%2000-28-30l-7-5c-9-4-8-7-8%2038v40l4%206%204%208c1%201%201%202%2018%202h17l-4-6c-5-9-3-10%206-1l7%207h172l171-1-2-4-2-4-2-1-2-1c1-1-3-5-4-4s-2%200-4-3l-4-4-4-3a14536%2014536%200%2000-13-8c-6%200-10-7-10-18%200-10-3-17-8-17l-3%202c-2%203-3%203-6-5l-7-11-3-2-6-2c-4-1-9-6-12-12-6-12-14-19-23-20h-5c-1%204-7%203-13%200-4-3-6-4-9-3-3%200-5%200-7-2s-4-3-9-4l-9-2c-5-2-11-3-13%200-2%201-1%205%203%208%202%202%202%203%201%207%200%204-1%204%2014%2012%206%203%2011%207%2011%209l-2%203c-4%203-4%204%201%2011%205%208%205%209-2%2010l-7%202c-2%202-1%208%202%2012a53%2053%200%20017%2011c4%206%207%2016%206%2017l-1%204-3%204-2%203-2-3-4-2c-2-1-2-1-2%202%201%204-3%207-8%207-4%200-4-1-9-7l-3-4-1%202c-2%200-6-3-5-3l-2-1-3-1-1-2-4-1c-3-2-3-2-5%200s-3%202-5%202c-4-1-5-2-3-3%201-2%201-2-2-2-2%200-3-1-3-2l-3-2-4-3-3-3-10-10c-2-5-4-6-6-6l-3-1%202-1%202-1c0-2-2-4-3-2s-4%200-4-3c0-2-1-3-4-3-3-1-4-2-4-4l-2-4-1-3c1-2-1-4-3-3l-1-7c0-5%200-6%203-9l3-4%202-1%204-4a186%20186%200%200142-35l5-4%207-4a295%20295%200%200134-21l15-10%209-7c-1-3%201-4%203-3h2l2-1c2%201%203%200%204-1l3-3%203-1%204-1%202-2%204-2c2%200%204-1%204-3l1-1%201%202%206-3c6-3%206-3%203-8l-3-5-1-2-4-6a59%2059%200%2000-7-10%201809%201809%200%2000-17-30c-6-11-8-13-12-12-6%201-15%205-17%207l-3%201-3%202-2%201-10%205-3%201c-4%200-35%2017-49%2027l-29%2019-13%208-20%2015c-13%208-14%208-15%202-1-3-2-4-4-4s-4-3-3-5l1-4%202-3c2-1%202-2%202-4-4-15-2-19%2018-43a127%20127%200%200134-32l24-14c3-2%204-3%201-3l-2%201-1%201-2%201h-3c-2%200-2-1-2-3%201-3%200-3-2-3h-3c-1-2%203-5%207-5%203%200%205-2%202-2-2%200-2-1-1-3v-2c-1-2-6%202-14%2010-14%2014-22%2019-20%2013l-1-5c-1-2%200-3%202-2l2-3%202-5%2015-14a530%20530%200%200023-13c4-2%2015-2%2015-1%200%202%205%203%2019%203l11%201%2011%203%207%204%206%203c2%200%205%204%206%206s-8%2010-10%2010l-2%202-5%203-6%203-7%205-6%204c1%200%208-2%2023-9l18-7c2%200%202-1%202-4-1-4%200-4%206%203l5%203%2031%207a479%20479%200%200027%208c0%201%201%202%203%202l3%201h2l5%202%203%201%204%202h4l6-3c4-1%207-5%209-12a196%20196%200%20018-28l2-7c2-2%2019-60%2019-65a2338%202338%200%2000-173%201c1%201%201%201-1%203l-3%202c-2%200-1-3%200-4%202-1%202-3-1-3l-1%202h-1c0-2-1-2-1-1l-4%201c-3-1-7%201-7%203s-5%202-8%201h-6c-4%201-10%200-10-2l-1-1-2%202h-4l-2%201%203%201c4%202%204%202%204%200h1l2%201v1l3%203%206%205%202%203-3%201c-2%201-4%202-5%201h-4l-2%201-5%204-9%206-6%206-1%201-4%205-3%205c-2%201-2%203-2%204l-2%201h-2c0%202%207%200%209-1l4-2c2%200%203%200%202-1-1-3%203-6%208-7l4%201-1%203-5%203-8%206-8%208-9%208c-4%205-5%204-6-3%200-7%200-7-5-5-2%201-5%203-5%205l-3%202v1c2%200%203%203%201%205l-2%203-1%202-2%203-2%202-3-1-2-2-4-1c-2%200-2%200-2%202l-2%202-3%202-3%201h-7c-2%203-5%202-4%200v-3H67l-11-1H40l-2-1c-6%200-6-10-1-18l3-5%203-3c2-2%202-2%201-6l-1-6c1-4%200-6-5-9-4-2-5-6-2-10%202-2%202-3%201-5v-4l3-16%201-4H0v120m203-71c-8%202-10%202-10%204s-3%202-7%200c-3-1-2%202%201%204h7l9-1%2012-1%2010-2c6-1%2010-3%209-5-2-1-25-1-31%201m-83%2031l-4%206-4%205c0%202%205%205%206%204%202%200%208-11%208-15%201-3-5-3-6%200m94-1l-6%201c-2-1-15%202-20%204-3%202-3%202-4%201s-9%201-9%203c0%203%2025-1%2038-5l9-3%202-1h-10m150%2046c-6%202-13%209-16%2015l-4%206c-3%203-3%2010%200%2014l2%205c-1%202%200%203%201%203%203%201%203%206%200%207l-2%203-2%203-1%202-2-2c-1-4-4-4-4%200l-2%203-3%201h-3c-2%200-1%201%201%204a475%20475%200%200042%2049c2%202%202%204%200%202l-5-1c-4-1-7-4-9-9-1-4-4-8-5-7l2%206c2%205%202%205%201%207-4%202-13-6-13-11s-11-13-15-10c-2%202-1%2017%202%2021l3%205c2%203%205%207%207%207l4%204%205%204%201%202%202%201c2%200%202%201%201%203%200%203%200%203%202%204l2%202%202%201h1l-1%201-1%202-1%201c-1-1-3%200-3%201-2%201-2%201-2-3l-1-2c-1-1-1%200-1%201%200%202-2%203-2%201l-2-1-9-7-4-4%203%207%203%204c2%202%202%203%200%204l-2%201h-1l-2-1c-2-1-2-1-3%201h-1l-3-4-3-5-1-2-2-3-4-6-2-3c0-2-4-2-5-1-1%200%200%202%202%203%204%203%208%2010%2010%2016%202%205%205%207%2011%208%206%200%209%202%2010%205%201%204%204%206%209%207l11%206c5%205%208%206%2012%205%205-1%205-2%208%203%202%204%203%204%205%204%204-1%2010%201%2011%204%203%203%202-4%200-9s-3-8-1-6l2%201%201-84v-84l-6-2c-14-5-22-6-30-3m-137%209l-2%202-1%201h-1l-4%201-4%202-2%203c-2%200-10%207-10%208l3%201c2%201%202%200%202-1-1-2%200-2%202-2l3-1%202-2%201%201%202%201c2%201%202%201-1%202l-5%203-6%204-9%206-8%204c-3%201-3%201-3%206l5%2015%208%2022c2%207%206%2014%207%2015%202%200%2013-6%2016-9l6-3c6-4%2016-12%2016-14l3-1c1%200%204-5%203-8l1-5c1-2%201-3-1-6-1-3-2-5-1-7l-1-2-1-2-2-3v-5l-5-4-3-4%202-2v-2l-2%202c-2%202-4%203-4%201l-3-1-4-1%201-1%203-3c0-2%202-4%203-4%202%200%204%201%203%202l1%201%201-2-1-2v-1c1-2%201-2-1-2l-3%202h-1l-2%201-2%203v-6h1c1%200%202%200%201-1v-2h-3m21%202c-5%201-5%202%201%2015%205%2011%206%2014%205%2015v5l2%202v3l1-3%201-2%201%202c1%203-1%205-3%204l1%203c1%204%203%205%203%202%201-3%203-2%204%202%200%204%203%207%205%205l3-1%205-2%203-3-4-8a91%2091%200%2000-8-13l-3-5-1-1-8-18c-2-4-2-4-8-2m49%2014l6%208a218%20218%200%200115%2018c2%202%203%202%208-1%203-2%205-1%207%202l2%203-1-3c-1-5-1-5-4-5-2%200-2%200-1-1v-7l-2-3c-2%200-7-6-7-8l-7-2-11-3c-8-3-9-3-5%202m-81%2015l-5%202-3%201-3%202c-5%202-5%203-2%209l8%2024c2%206%203%206%2012%200s10-7%2011-12c3-9%203-10-3-9v-3l1-2-2%201h-4c-2%202-3%201-2-1h-1c-1%201-5%201-5-1l-1-2v-1l1-2%203-2%203-2%201%201v3l1%202c1%201%201%200%202-1%200-1%201-2%203-1%202%200%202%200%201-2l-2-3-5-2h-3c-2%202-3%202-3%201%200-2-1-1-3%200m-45%2015c-5%202-8%204-25%2016-13%209-13%208-6%2024a340%20340%200%20019%2028c3%2012%204%2013%2010%208l4-3-1-4c-7-20-7-19%208-30l12-9-2-8-12%207c-6%205-12%208-13%208-2%200-6-9-5-11%200-2%207-6%2014-11%2014-9%2014-10%2014-13-1-4-2-5-7-2m190-1l-3%201c-3%200-3%201-4%204-1%204-1%205-5%205-8%202-6%206%201%206%202-1%203%200%203%201s2%202%203%201c2-2%203-1%203%201-1%202%201%203%204%202l5%201c3%202%206%202%206%200l2-1%201%202c0%206%206-1%206-7%201-3-4-5-6-4-1%201-2%200-4-1-1-2-4-3-4-1h-6c-4%200-5%200-5-3%201-3%202-4%203-3%201%202%207-1%207-3l-1-2-6%201m-100%207l-4%205-1-3-1-2c-2-1-2%207-1%208l1-1c0-1%201-2%202-1v1c-1%201-1%201%201%203l4%204h8c1-1%201-1-1-1s-3-1%200-2c1-1%201-1-1-2l-3-3-2-2-1-3-1-3v2m53%206c-3%200-3%200-1%209%200%202%200%202-3%202-5-1-7%201-5%206l1%205c-1%204%200%206%201%205l1-6c-1-7-1-7%204-6l4%201v16l1-6%201-9%202-5%204-3%202-2c-1-1-4%200-6%201-5%203-5%203-6-1-2-4-1-5%205-5%204%200%205-1%203-2l-3-1-5%201M50%20209c-1%202%202%2010%205%2013%202%202%2013%205%2015%204s0-4-2-4c-5%200-10-5-10-9%201-4-5-7-8-4m68%2010c-4%204-4%207-1%2015l2%206%202%206a70%2070%200%20017%2025c0%202%200%203-1%202l-1%202c1%201%201%203-1%204-1%202-1%204%201%203%207-3%2010-24%206-36l-6-19-4-12-4%204m259%2030l1%203%202%208%204%2011%201%206%201%201%203%206c3%206%205%208%206%206%201-1%200-6-2-9l-2-5-1-4c-2-2-3-5-2-7v-1l-2-3-4-8c-4-6-7-8-5-4m-150%2029v5c0%203%200%204%203%205%2013%207%2023%2017%2023%2023%200%202%201%203%205%204%204%202%207%203%208%205%203%204%202%205-2%202-3-2-5-3-5%200l-2%201c-4-1-4-1-1%205%201%202%203%207%203%2011l3%209c3%203%204%204%204%202%200-3%203-2%207%202%205%206%207%207%206%203%200-2%200-3%204-3%206%200%206-1%205-6s-1-8%201-8c3%200%2011%209%2012%2013%202%206%209%2011%2011%208l3-1c1%200%202-1%202-3%201-3%201-3%204-3s4-1%205-2c0-2%201-2%203-2%203%201%203-1-1-12-3-9-6-14-9-14-4%201-17-8-17-12l-9-16c-3-3-7-6-8-5v3c2%203%201%203-3%202-5-3-7-3-7-2%201%203-5%201-11-5-3-2-4-2-8-2-4%201-6%201-11-2s-5-3-7-1h-3l-8-4m57%2036l-1%202c0%202%204%207%205%205%201-4%208%202%2012%2011l3%206%201-4c1-5%201-5%205-2%207%206%205%200-2-7-5-4-5-4-7-3-1%202-2%202-4-2l-10-7-2%201m-39%2028l3%205%204%206%203%205%202%205c2%203%202%204%203%203l4-1h3l2-1c6%200%206%200%206-3-2-4-5-7-8-7-2%201-3%200-7-3l-5-5-3-2c-3-3-7-4-7-2m87%2034c-1%202%203%204%206%203%201-1%202%200%203%201h3l2%201%203%201%202%201%203%201%203%202c1%201%201%200%201-2s0-3-2-3l-4-2c-3-4-6-4-13-4l-7%201'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1,"src":"/static/e4ce898081185972b07d7644961b7af2/4fe8c/just-fucking-do-it.jpg","srcSet":"/static/e4ce898081185972b07d7644961b7af2/aabdf/just-fucking-do-it.jpg 150w,\n/static/e4ce898081185972b07d7644961b7af2/9dc27/just-fucking-do-it.jpg 300w,\n/static/e4ce898081185972b07d7644961b7af2/4fe8c/just-fucking-do-it.jpg 600w,\n/static/e4ce898081185972b07d7644961b7af2/9842e/just-fucking-do-it.jpg 900w,\n/static/e4ce898081185972b07d7644961b7af2/16310/just-fucking-do-it.jpg 1024w","srcWebp":"/static/e4ce898081185972b07d7644961b7af2/ad85c/just-fucking-do-it.webp","srcSetWebp":"/static/e4ce898081185972b07d7644961b7af2/e7487/just-fucking-do-it.webp 150w,\n/static/e4ce898081185972b07d7644961b7af2/403a4/just-fucking-do-it.webp 300w,\n/static/e4ce898081185972b07d7644961b7af2/ad85c/just-fucking-do-it.webp 600w,\n/static/e4ce898081185972b07d7644961b7af2/210c1/just-fucking-do-it.webp 900w,\n/static/e4ce898081185972b07d7644961b7af2/cc834/just-fucking-do-it.webp 1024w","sizes":"(max-width: 600px) 100vw, 600px"}}},"slug":"jfdi","keywords":null}}},{"node":{"excerpt":"This is a playlist of rap songs that I enjoy that I put together for a youngster that was listening to some questionable music. There's a lot of \"missing\" songs. Great songs. Hit me up  on Twitter  if you think I'm making any greivous errors here 😂 I like it on shuffle, usually...\nimport…","id":"43ccf2a1-db98-54ee-b4c5-4d8f21c78a65","fields":{"title":"A Child's Totally Innapropriate Introduction to Hip-Hop","slug":"hip-hop","date":"2020-12-06T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"A Child's Totally Innapropriate Introduction to Hip-Hop","date":"December 06, 2020","banner":null,"slug":"hip-hop","keywords":null}}},{"node":{"excerpt":"Working with consultants can be great.  We've always hire consultants to help build egghead  and had a lot of success with that. Hiring anybody is risky, and \"doing business\" is an iterative exercise in risk management on many levels. Broadly, you can divide collaborators into two columns…","id":"02b734cc-7d79-5160-ba39-df381e3ca405","fields":{"title":"Discovery and Roadmapping Engagements for Hiring Consultants","slug":"discovery-engagements","date":"2020-12-02T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Discovery and Roadmapping Engagements for Hiring Consultants","date":"December 02, 2020","banner":null,"slug":"discovery-engagements","keywords":null}}},{"node":{"excerpt":"When the barber, an expert in their field, insists that you tell them how you want your hair cut. You fuckin tell  me  how it should be cut please. 😂","id":"19a4d32d-6186-5d4c-be9b-8a01c0628862","fields":{"title":"The Barber Shop Paradox","slug":"barber-shop-paradox","date":"2020-12-02T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"The Barber Shop Paradox","date":"December 02, 2020","banner":null,"slug":"barber-shop-paradox","keywords":null}}},{"node":{"excerpt":"One time I was hanging out in Philidelphia and witnessed something fantastic. Patrick McKenzie (better know as patio11 on the Internets) delivered a  full on rap  enforcing his long standing rule that  everything is markdown  when it comes to text. This stuck with me, as many pieces of advice patio…","id":"50531520-9124-5dc6-981a-e08601b132bb","fields":{"title":"Use Markdown for Emails in Convertkit","slug":"use-markdown-emails-in-convertkit","date":"2020-11-13T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Use Markdown for Emails in Convertkit","date":"November 13, 2020","banner":null,"slug":"use-markdown-emails-in-convertkit","keywords":null}}},{"node":{"excerpt":"Convertkit  automations provide a powerful mechanism for delivering  self-paced email courses  that can transition into an evergreen product pitch and promotion for your product. A typical approach is to offer some form of  lead magnet  as a  call to action  to attract new subscribers to your email…","id":"a807cde7-9199-51be-9445-10fdc498147f","fields":{"title":"Self-Paced Email Course and Evergreen Product Pitch using Convertkit Automations","slug":"self-paced-email-course-convertkit","date":"2020-10-18T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Self-Paced Email Course and Evergreen Product Pitch using Convertkit Automations","date":"October 18, 2020","banner":null,"slug":"self-paced-email-course-convertkit","keywords":null}}},{"node":{"excerpt":"30x500 is a repeatable product development system presented and designed by Amy Hoy and Alex Hillman. The system is research and value focused and provides and end to end cycle for creating products that people actually want to buy. This summary of the 30x500 system is very \" draw the rest of the…","id":"83d03164-5a45-5c98-aa4b-64ad7bd4e6ae","fields":{"title":"7 Steps to 30x500: a System of Product Success","slug":"7-steps-of-30x500","date":"2020-09-20T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"7 Steps to 30x500: a System of Product Success","date":"September 20, 2020","banner":null,"slug":"7-steps-of-30x500","keywords":null}}},{"node":{"excerpt":"It's Monday morning. You have a sip of your favorite morning beverage and open your email client. 3632 emails from dependabot spanning every repository you've ever create on Github wait for you. What do you do? Most likely ignore them, but keeping your massive list of dependencies updates is on one…","id":"957b3eab-cfa4-5c54-bf63-2581b6dedf14","fields":{"title":"Should I use automated dependency management?","slug":"automated-dependency-management","date":"2020-09-11T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Should I use automated dependency management?","date":"September 11, 2020","banner":null,"slug":"automated-dependency-management","keywords":null}}},{"node":{"excerpt":"If you want to jump right to the finish line and have an existing Github repository you want to run tests on, drop the following into a file here  .github/workflows/tests.yml  and you'll be running your tests whenever you push to your main branch or a PR is created. If you'd like to actually…","id":"2a32d660-791f-5332-a5e7-fbe5fc16bbe1","fields":{"title":"Continuous Integration with Jest Tests and Github Actions","slug":"jest-and-github-actions","date":"2020-09-10T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Continuous Integration with Jest Tests and Github Actions","date":"September 10, 2020","banner":null,"slug":"jest-and-github-actions","keywords":null}}},{"node":{"excerpt":"The  useState  hook in React is a great way to persist and update data within your React components. A simple component might look like this: This approach works for most cases but relies on the value of count in the current render. In this second example we are passing  setCount  a function…","id":"df08f616-1dda-5669-be0b-fe8f11f0dbb3","fields":{"title":"useState React hook allows updating state with a function","slug":"usestate-react-hook-allows-updating-state-with-a-function","date":"2020-09-03T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"useState React hook allows updating state with a function","date":"September 03, 2020","banner":null,"slug":"usestate-react-hook-allows-updating-state-with-a-function","keywords":null}}},{"node":{"excerpt":"Most of us have an ingrained sense of how to teach. This comes from the typical 12-16 years folks spend in school being taught to. Through a sort of osmosis process we get the feeling of how to teach and approach sharing knowledge with others. It builds intuition. When it comes to online courses…","id":"94c38ad9-7713-5b66-ad13-2b4faf2425aa","fields":{"title":"Understanding by Design","slug":"understanding-by-design","date":"2020-09-03T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Understanding by Design","date":"September 03, 2020","banner":null,"slug":"understanding-by-design","keywords":null}}},{"node":{"excerpt":"My friend Alex Hillman introduced me to the concept of tummling  and it has been something I've strived to be better at since I learned about it. Alex believes that we shouldn't try to be \"community managers\" instead we should work on being really good tummlers for our communities ❤️ Here's a great…","id":"30e98418-a53c-502a-873d-889b82fcff0d","fields":{"title":"How to be a Tummler: Designing for Conversation","slug":"tummler","date":"2020-08-07T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"How to be a Tummler: Designing for Conversation","date":"August 07, 2020","banner":null,"slug":"tummler","keywords":null}}},{"node":{"excerpt":"Knowledge Adventure Clubs are the intersection of book clubs and Dungeons & Dragons. When I was in Jr High I'd show up to school carrying a leather briefcase. Inside of that case there were several thick books, paper, and a bunch of oddly-shaped dice. I'd sit down at a lunch room table, crack open…","id":"82e40cb1-5e89-5801-8713-5836cd005578","fields":{"title":"⚔️ Knowledge Adventure Club","slug":"knowledge-adventure-club","date":"2020-08-07T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"⚔️ Knowledge Adventure Club","date":"August 07, 2020","banner":null,"slug":"knowledge-adventure-club","keywords":null}}},{"node":{"excerpt":"Painstorming is part of  the 30x500 course  by Amy Hoy and Alex Hillman. These are my notes from the course. Painstorming is like blamestorming, but we are hunting for the pains that people experience trying to achieve the outcomes they need and desire. When we painstorm, we aren't synthesizing our…","id":"1bb753c6-993b-5c09-9861-eebf0f8bb59b","fields":{"title":"Basic 30x500 Painstorming","slug":"basic-painstorming","date":"2020-07-25T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Basic 30x500 Painstorming","date":"July 25, 2020","banner":null,"slug":"basic-painstorming","keywords":null}}},{"node":{"excerpt":"Building a Second Brain is  a course  from Tiago Forte that presents a structured approach to consuming knowledge for interative understanding. It's rooted in Getting Things Done and the idea of  progressive summarization . Tiago also presents the PARA approach as a taxonomy for high level…","id":"a9c22daa-6686-5f19-8faa-c9d1d550e227","fields":{"title":"Build a Second Brain","slug":"basb","date":"2020-07-11T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Build a Second Brain","date":"July 11, 2020","banner":null,"slug":"basb","keywords":null}}},{"node":{"excerpt":"Consuming information is really fucking easy. Transforming information you consume into understanding you can implement? That's hard af. 😅 Progressive summarization is a layered asyncrounous approach to absorbing content (books, articles, videos, etc) and summarizing it at varied levels. This is a…","id":"fc0d9597-3606-5e7f-a2d5-672ebe407805","fields":{"title":"Progressive Summarization for Non-Fiction Books","slug":"progressive-summarization","date":"2020-07-11T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Progressive Summarization for Non-Fiction Books","date":"July 11, 2020","banner":null,"slug":"progressive-summarization","keywords":null}}},{"node":{"excerpt":"Calibre can be used to convert kindle books to PDF by installing a plugin called DeDRM_tools. You'll need the serial number of  your Kindle device . As far as I know this only works with books you've purchased and if you own a Kindle. Install  Calibre v4.20.0 Download the latest release of DeDRM…","id":"ce1e56dc-1b6b-5fe6-aea4-a7296c18050a","fields":{"title":"Use Calibre to Convert Kindle Books You've Purchased to PDF","slug":"calibre-kindle-to-pdf","date":"2020-07-11T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Use Calibre to Convert Kindle Books You've Purchased to PDF","date":"July 11, 2020","banner":null,"slug":"calibre-kindle-to-pdf","keywords":null}}},{"node":{"excerpt":"PDFs on the iPad Pro using PDF Expert are extremely versatile to annotate and use for studying non-fiction texts such as books and academic papers. The  PDF Spec  has been open for years and you aren't forced to use Acrobat if you want to harness the full annotation capabilities of the PDF format…","id":"a4f4f718-015f-5d17-ad00-e084adce153e","fields":{"title":"Using PDF Expert to Highlight and Summarize Non-Fiction Books on the iPad Pro and Mac","slug":"pdf-expert","date":"2020-07-11T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Using PDF Expert to Highlight and Summarize Non-Fiction Books on the iPad Pro and Mac","date":"July 11, 2020","banner":null,"slug":"pdf-expert","keywords":null}}},{"node":{"excerpt":"One of the challenges with state management in React is coming to terms and deciding as a team how you will categorize the layers of state in your application. It's variable and often nuanced to describe the layers but framing them in a simple hierarchy is an excellent tool for communicating with…","id":"ae70c648-e65c-5716-88df-a2ce2020c140","fields":{"title":"5 Layers of State Management in React Applications","slug":"5-layers-react-state","date":"2020-05-12T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"5 Layers of State Management in React Applications","date":"May 12, 2020","banner":null,"slug":"5-layers-react-state","keywords":null}}},{"node":{"excerpt":"In a complicated web application there are going to be several pieces of truly global state that you'll need across your application. This is state that components need, but it's tedious and error prone to use prop drilling to pass state data around to all of the components that might need it…","id":"37e7ec27-1c51-5ec9-a64e-a74939e4e25b","fields":{"title":"Using React Context and Custom React Hooks for State Management in React Apps","slug":"react-context","date":"2020-05-12T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Using React Context and Custom React Hooks for State Management in React Apps","date":"May 12, 2020","banner":null,"slug":"react-context","keywords":null}}},{"node":{"excerpt":"The phrase \"digital garden\" is a metaphor for thinking about writing and creating that focuses less on the resulting \"showpiece\" and more on the process, care, and craft it takes to get there. While not everybody has or works in a dirt garden, we all share a familiarity with the idea of what a…","id":"2aa5a9ce-23e9-55d8-bda9-851756624a12","fields":{"title":"🌱 My blog is a digital garden, not a blog","slug":"digital-garden","date":"2020-05-10T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"🌱 My blog is a digital garden, not a blog","date":"May 10, 2020","banner":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='274'%20viewBox='0%200%20400%20274'%20preserveAspectRatio='none'%3e%3cpath%20d='M122%2023c-5%201-9%204-8%206l4-1h8c-1%201%200%201%200%200l5%201%203%201-5%202-8%202c-4%200-5%201-6%204-3%205-2%207%200%204l2-2v2l1%203%202-3c2-2%203-3%205-2%207%201%2014%2010%2012%2014l-1%203c0%202%206-5%206-7h1v-3c-1-4%202-1%204%203%202%206%204%204%204-4%200-7%200-7%202-6h4c2%200%202%200%201%201v1h1l1%201%201%202%202%202v8l1-1%201-1v5l-1%202v-2l-1-2-6%201-8%202-10%202c-7-2-14%200-16%204-2%203-4%2010-3%2010l1-1c0-2%205-7%209-8%204%200%205%201%201%202-2%201-2%201-1%202%201%200%201%201-1%203l-2%203c1%201%201%201%200%200v1l-1%201c-1-1-1-1-1%202-1%202-13%207-16%207-1%200-2-1-2-3%200-1%200-2-1-1l-1%202v1l-1%202-1%201-3%202c-1%201-1%201%201%201l2%201-1%201c-1-1-1%200-1%201%200%2017%200%2022-2%2021h-1l1%202c2%201%201%202-1%201-2%200-2%200%201%203s4%204%204%2011l1%201c2%200%203%203%204%2029a152%20152%200%20005%2041v2l1%202-2-1-3%204-7%2010c-3%204-3%206%201%206l1%201%202%201c2%200%202%200%202%202%200%203%200%203%204%202%203%200%207%200%2012%202l11%203%209%203c7%203%2011%204%2017%201l11-2c7%200%208%200%2016-4l8-3%205-1c2-1%202-1%204%201h5c-1%201-1%202%201%202h2v3c-2%2012%200%2017%207%2019%204%201%204%201%2011-5l10-9%203-4%201-1h1l3-4c3-3%204-4%203-5l2-3c3-4%202-5-1-2l-3%202%204-4%203-5%202-4%201-2c-2%200%200-4%203-7s4-4%201-4v-4c0-1%200-2-2-2l1-2v-3l-1-3-1-5v-5l1%203%201%201v-4c0-3%200-4%202-5v-1l1-3%202-2%202%201%201%202%201%206c0%205-1%207-4%209l-2%201h2l7%201h3c1-2%201-6-1-6v-2l2-5c2-6%203-5%203%202l1%205c2-1%205-12%205-16l-1-6c0-3-1-3-13-1l-13%202-9%201h-8c-1-1-3%200-6%204-4%204-5%206-1%202h2l-1%202-1%202-1%201c-2%201-1%202%202%202%202%200%203%202%203%2010%201%203%202%203%203%200l2-4%202-4c0-2%202-2%203%200s-3%209-8%2013a635%20635%200%2000-16%2017c1%201%200%203-2%205-3%203-4%203-4%202l1-2%201-1h-2v-2c1-3%201-3-1-3-1%201-2%200-2-1l1-1h1c1-1%200-1-1-1-2%200-2%200-1-27%200-35%200-36%202-43l2-6c-1-1%203-4%206-6l2-2c-2%200-2-2-4-13l-2-6-1-4-1-1-5-2a19675%2019675%200%2001-24-9c-4-1-21-3-22-2l-1-14c1-20%204-26%2020-35%204-2%205-2%2016-3%2013%200%2016%201%2015%202l3%201c8%202%2012%208%206%2011l-1%201h-2v2h-1l-2%201c-1%200-2%200-1%201%200%201-1%202-3%202-4-1-5%201-2%202%203%200%205%200%2010-3%202%200%202%202-1%205v2c1%200%209-6%209-8l3-3%202-3%204-1c4-1%2011-6%2012-8l-4-1c-3%201-4%201-3-2%200-2-1-6-3-6l-1%202-6%209-2-2c-1-2-1-2-2-1l-2-1c-4-4-21-8-31-6a483%20483%200%2001-18%204l-6%204-4%203-4%206-4%204-3-4c-3-3-14-7-20-7l-5-4-6-5-2-1h-1l-2-1-6%201m26%2041l-4%205-3%205-4%202-4%203h28v-3c1-2%200-3-1-5l-2-1h2c2%200%204-3%202-6h-14'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.4563106796116505,"src":"/static/c8e3346df4dc4ce9da1078536d823478/2a4de/plant_01.png","srcSet":"/static/c8e3346df4dc4ce9da1078536d823478/6d161/plant_01.png 150w,\n/static/c8e3346df4dc4ce9da1078536d823478/630fb/plant_01.png 300w,\n/static/c8e3346df4dc4ce9da1078536d823478/2a4de/plant_01.png 600w,\n/static/c8e3346df4dc4ce9da1078536d823478/ee604/plant_01.png 800w","srcWebp":"/static/c8e3346df4dc4ce9da1078536d823478/ad85c/plant_01.webp","srcSetWebp":"/static/c8e3346df4dc4ce9da1078536d823478/e7487/plant_01.webp 150w,\n/static/c8e3346df4dc4ce9da1078536d823478/403a4/plant_01.webp 300w,\n/static/c8e3346df4dc4ce9da1078536d823478/ad85c/plant_01.webp 600w,\n/static/c8e3346df4dc4ce9da1078536d823478/58556/plant_01.webp 800w","sizes":"(max-width: 600px) 100vw, 600px"}}},"slug":"digital-garden","keywords":null}}},{"node":{"excerpt":"We unlocked Erin Doyle's amazing course on accessibility as a Community Resource on egghead. This means that it is  free to view for every web developer on the planet  with a device and an internet connection. This is part of our long term goal of making every egghead course free to view for all as…","id":"dd58c572-1672-5cf7-aaad-b9ff8dbb3164","fields":{"title":"Start Shipping More Accessible React Applications Today with Erin Doyle","slug":"accessible-react-applications","date":"2020-05-04T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Start Shipping More Accessible React Applications Today with Erin Doyle","date":"May 04, 2020","banner":null,"slug":"accessible-react-applications","keywords":null}}},{"node":{"excerpt":"There are a two facts that we understand very well at egghead: Constant learning is an essential habit for professional web developers. There's not enough time in the freaking day. 😱 Some of us are lucky enough to work at companies that provide us with space and freedom to pursue continued…","id":"332b5c9c-0fe6-5803-8718-0951e8cb31b5","fields":{"title":"egghead vs Udemy for professional web developers","slug":"egghead-vs-udemy","date":"2020-04-29T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"egghead vs Udemy for professional web developers","date":"April 29, 2020","banner":null,"slug":"egghead-vs-udemy","keywords":null}}},{"node":{"excerpt":"Broadcasting on the internet is here to stay. More and more we are seeing people use sites like Twitch and Youtube to deliver real-time video and audio to connect with their audience. Increasingly over the years as a remote worker video chats have become more and more the standard of communication…","id":"e506b389-eb2c-5fed-b48e-40436fad6fe4","fields":{"title":"Using a dSLR as a Webcam for Live Streaming","slug":"dSLR-webcam-for-live-streaming","date":"2020-04-29T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Using a dSLR as a Webcam for Live Streaming","date":"April 29, 2020","banner":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='300'%20viewBox='0%200%20400%20300'%20preserveAspectRatio='none'%3e%3cpath%20d='M76%202l-1%2016a314%20314%200%2001-2%2054c1%201-2%201-7%201-10%200-10%200-10%2013a814%20814%200%20002%204v-8l3%209c4%2015%205%2021%204%2022l2%201c2%200%202%200%201%201-1%200-2%201-2%203l5%2026c2%201%203%206%202%207v3c1-1%201%201%201%204-1%206-2%208-3%207l-2%203-1%205c-2%204-2%2012-1%2016%201%203%201%205-1%207-1%204-9%2010-12%2010l3-3c12-8%204-24-10-20l-5%202c-6%206-6%2012-3%2016%203%203%202%204-2%201l-1-2-1-1-1-3c0-2%200-2-1%200l-1%204-1%203-1-1v-1l-3-9a102%20102%200%2000-6-16l-1-2-1%207c0%206%200%208-2%2011s-2%203-9%202c-2-1-6-6-6-8l4-6%204-5c0-1%201-2%203-2%203-2%204-5%201-5-2%200-3-2-3-5l-1-2-1-5c0-4-1-5-3-5-4%200-4-2-3-7%203-7%202-8-1-8H0v49l1%2049%203%202c2%201%202%202%201%206l-2%205-1-5c-2-4-2-3-2%2027v31h22v-4c-1-3-1-4%201-6%203-3%208-7%2010-7s1%202-2%203l-3%201%202%202c2%203%202%203%200%205l-2%203v3l3-4c3-4%203-4%205-2%202%201%202%201-1%203l-2%202c0%202%203%201%205-1s4-3%204-1c2%204%2016%203%2021-1l5-3%203-1%203-2%201-1c-1-1%201-2%2011-4%205-1%207-2%207-4s0-2-10-1l-9%202%202-6c2%200%203%200%203-3%201-3-2-6-5-6-2%200-3-2-2-4h8l6%206%202-2%202-3c1-1%202-7%201-9v-1l11-5-6%201c-5%202-9%202-7%200l8-3%2011-6%207-2h2l2-1c0%201-1%203-6%206v1c2%200%208-5%208-7s2-3%203-2l1-1-2-1c-3%200-3%200-3-3%200-2-1-4-5-7-4-5-6-8-3-6l1-1c-1-1%201-2%204-3l2-1h2l4-1v-1c-1%200-2-1-2-4%200-5%200-5%203-2s4%206%202%206l-1%203-1%202-2%201-2%203c-2%202-2%206%201%206l1%202c-1%203-1%203%203-1l3-6c0-3%201-4%203-4h7c5-1%205-1%204%201v4c2%203%201%204-5%208-5%203-8%206-5%205l12-9%205-1c9-1%2013-5%208-9-2-2-3-2-5%200s-2%202-3%201c-1-2%200-2%205-4s6-3%206-5%200-2%201-1h2l1%202c0%204%202-1%202-5%200-2%200-3%202-3s2-1%202-4c0-4%200-4%203-4l6-1c3-1%203-1-2-1l-6-1-1-2c-1%200-2%203-1%204l-1%205-2%202v-2l-1%202c-1%201-1%201-1-3%200-2%200-4%202-4%203-2%201-4-3-3h-3v6c0%208%200%208-4%206-2-2-3-2-4-1s-2%202-3%201c-2%200-5-3-3-3l1-2c0-2%201-3%202-3v-1h3l5-1h-3c-3%200-3%200-3-3v-3h22c26%200%2026%200%2024%205-1%203-2%204-5%202l-6-2c-3%200-4%200-3%201l5%201h3l-3%204-4%203-2%201h26c3-2%205-1%2014%201l13%202c4%200%208%202%206%204l-2-1-5-1-5-1-1-1-1%204c0%203%200%203%203%203l5-1%203-1-1%202-4%202c-3%200-5%202-4%204l1%2026%201%2027%2022%203a1766%201766%200%200155%205l-3-9-3-9c1%200%203%203%206%2011l1%205%203-3%202-4%202%201%204%201c2%200%207%205%206%208a885%20885%200%2000-2%204c0-3-2-1-3%202%200%204-3%208-3%206v-6c-1%200-2%203-2%207v4c-1%204%200%205%205%205%203%200%204%200%205-2l2-2v4l2-2%202-3v3c-1%202-1%202%2033%202h34v-34a170%20170%200%2000-1-35l1-3c0-2%200-3-1-2v-1l1-45v-44l-1%2038v39h-4c-3-1-6-3-6-6%200-1-5-5-6-4l-1-1-2-6c-2-5-3-29-1-43l1-9v-8l1-12%201-12%201-9c0-8%200-9%203-11s4-4%202-4-2-1-2-4l1-4c2%200%202-2%202-8%201-13%203-24%203-12l1%204%201-4%201-8c2-4%202-4%200-4-1-1-1-1%201-3%203-3%204-5%202-5v-1l1-20V1l-9-1-10%201h-1l-5-1c-6%200-6%200-2%204l2%203-2%201-2%201%202%201c3%201%203%201%203-1l1%202v7l-2%207-2%206a471%20471%200%2000-8%2028%20539%20539%200%2001-18%2061l-3%2010a255%20255%200%2000-11%2033l-1%202-1%204-2%204h-1c0-2-4-3-4-1l-11%201c-10%200-11-1-13-3-1-1-2-2-5-2l-5-2-2-2-2%202-5%202c-2%200-2%201-2%203%200%204-1%203-2%200v1l-1%204-1-1h-1c-2%203-2%201-1-7%203-25%204-38%203-39l-35-2%2017%202%2017%201v4a291%20291%200%2000-3%2020l-1%202c0%202-1%202-2%202-2%200-3%203-3%2012%200%203-1%204-3%204s-3%201-3%205c-1%205-1%205-4%205-2%200-3%200-2%202l-17-1-52-2h-38v-4l2-8c2-5%203-5%207-5l5-1h-5c-4%200-5%200-5-2l-6-14a53822%2053822%200%2000-26-54l-1-5c-1-3-1-3-2-1-1%201-1%201-1-1v-4l-2-1-4-5c-3-3-4-3-10-3h-8v-4a832%20832%200%2000-6-54C83-1%2084%200%2079%200c-2%200-3%200-3%202m40%204c0%207%202%2012%205%2014l2%203c0%202%204%208%206%2010l3%205c0%204%205%208%2010%208%2010%202%2012%202%2013%201l3-2c2%200%2010-9%2010-11l1%201c1%201%201-2%201-9%200-10%200-12%202-15l3-3%201-2%201-2%201-3-31-1h-31v6m96-4c0%202%202%209%204%209l4-1%206-2%203-1c2-2%203-2%203%200l8-6-14-1c-13%200-14%200-14%202m-6%2018c-17%203-31%2017-33%2033%200%205%200%205-3%204-4%200-4%200-4%204-2%207-1%209%201%204%202-6%202-6%204%201%201%206%205%2015%205%2014l-2-7-2-9c0-3%200-3%201%202l4%2010-1-7c-7-23%209-45%2034-47%2015-1%2031%2010%2037%2025%201%203%201%203%201%201%200-7-10-20-20-24-4-2-6-3-14-4h-8M93%2090l2%2012a1212%201212%200%20009%2074l4%201c2%201%202%201%205-2l4-3c2%200%202%201%200%203-1%201-1%201%202%204l3%202a639%20639%200%2000-2-57c2%200%202-1-1-7-1-3-1-3-2-2l-4-8c-7-17-9-19-16-19-3%200-4%200-4%202m100%204l-4%203c0%202-1%202-1%201-3-2-6-2-6%200-1%202%200%203%201%203l1%201h-1c-2%200-3%203-3%207l-1%205-2%205c-1%203-6%204-8%202h-1l-2-1-6-1-2%203c-2%202-4%202-13%202l-11%201a849%20849%200%200171%200h-8l2-2%203-1%201-1h1l1%202v1l2-1h1l2%201%201-1v-2l-1-2h1l2%202v-5l-1-6%201-2c-1-3-2%200-4%206-1%203-1%203-1-3l-1-7v4l-1%204c-1-1-1%200-1%204v5l-1-5c-1-5-2-7-6-8-3-2-9-2-10%200h-1c0-3%207-9%2010-9s5%202%206%205c1%201%201-1%201-3%200-4-1-5-2-5l-3-1-2-2-4%201m-72%2032l1%2026%202%2026c0%202%201%202%204%202s3%200%201%201c-2%202-2%202%202%202%209%201%2013%200%2013-3s0-3-1-2c-3%202-4%200-2-7v-8l-2-4a168%20168%200%2000-16-32c0-2%200-2-2-1m126%2013l-1%208%201%205v2l-1%201v2c2%200%202%203%200%203l-1%201%201%201h1v1c-3%200-2%204%200%204v1c-2%201-2%201%201%201l4%201h-4c-3%200-5%202-2%202l1%201h-2l-1%203v2c-1-2-1-2-1%200l1%202%206%201c4%200%204%200%204-4l1-8c0-4%200-5%202-5s3-1%204-11l1-10c0-2%200-3-2-3l-2-1-2-2-5-1c-4%200-4%200-4%203M80%20178l-1%206c1%203%200%205-2%205l-2%202c0%202%200%202%205%202l6-2c1-1%201-1-1-1-3%201-3%201%202-4%204-5%204-6%200-7l-4-4c-2-3-3-2-3%203m96-4l-2%201h-2a1751%201751%200%200167%204c5%201%204-3-1-3-6-1-59-3-62-2m-82%2016c-3%200-3%200-2%204l1%204%201%201%202%203%202%202%203-3%203-4%201-1%201-3c0-2%200-3-4-3h-8m155%2015v2h3l2%202c2%201%202%201-2%201s-5%200-4-1c2%200%201-1-2-1s-4%201-1%202l2%202c-1%201%201%202%209%203%204%200%208%201%2013%205%209%205%209%205%209%202l-1-2c-2%200-2-2-1-4h7l-1-1-3-2-2-4v-1l1-4-4%202c-3%204-5%205-5%204l-3%201c-2%202-3%202-3%201-1-1%200-1%201-1%202%200%200-1-7-5-6-2-7-3-8-1m117%205a1016%201016%200%2000-24%2033c-1%201-1%205%201%205l1%202-1%201-2-2h-1l-4%202c-2%200-2%200-1-1v-1l-2%201v3c-1%201-1%201%201%201l6-2c5%200%205%200%208%204l3%206h1c1-1%202%200%205%204l6%206a443%20443%200%200031-43h-2v-2c-1-1-2-2-3-1l-4-2-1-3v-1h-3v-3h-2l-5-4c-5-4-6-5-8-3m-72%205c-3%201-3%202-2%202l2%201h-2v2c1%202%200%2010-1%2011l-5%201c-4%200-5-1-8-5-1-2-2-1-4%2011l-1%2014c1%202%203%201%202-1%200-2%202-3%202-1h1c0-2%200-2%203-1%202%201%203%202%203%204l1%203%201-2%201-3c2%200%201-3%200-3l-2-2-2-5c-2-4-3-5-1-4l2-1h3l1-1%201%202%201%204v-4c0-5%201-5%2013%202%2010%206%2013%207%2014%203v-2c2-4%202-8%201-8-2%200-6-4-6-6s-1-2-3-2l-4-2-3-2v-1c2-1%201-4-2-5-4-1-3-1-6%201m-195%203l-2%202h-1l-4%201c-2%201-2%201-1%203%203%203%202%204%200%201-3-3-8-2-7%201h-1c-1-1-7%200-7%202l-3%201c-4%200-5%201-1%205%202%204%205%205%208%202l2-1%204-2%203-1c2%200%205-2%204-4h6c2-1%202-1%200-3l-1-3%202%202c3%202%204%202%206%201%203-2-3-8-7-7m68%205l14%201a1190%201190%200%2001-14-1m-153%209l-2%202c-2%200-6%208-7%2013%200%204%200%204%208%2027l4%2010%204-5c5-4%205-4%204-5l-1-2-1-1-1-1%201-2%201-1%201-2c2%200%201-2-3-11l-6-11c0-2%203-1%205%202l3%203c0-1-3-7-5-7-1%200-3-3-3-6-1-4-2-5-2-3m295%2018c-4%202-8%207-8%209l3-2c3-2%206-3%203%200-2%200-2%201-1%201h2l3%202c2%201%203%200%201-2v-1l8%208v-2c0-4%200-4%202-2l5%203%205%205%206%207c4%204%204%204%204%202v-3l1-1c-1-1%200-1%202-1%203%200%203%200%201%201-2%200-2%202%201%202l3%202h4v-3l-3-2-2-1h-3l-1-1%201-1c-1%201-2%200-3-1-3-3-7-3-8-2h-1l-4-3c-7-4-9-6-9-11%201-4%201-5-1-5l-3-1-8%203m-128%202l-3%201-7%201-7-1c-1-1-3-1-8%202l-9%203c-3-1-3-1-3%201s-6%205-38%2021a1215%201215%200%2001-39%2019c-1%201%2031%201%2096%201h97l-5-4-43-37h5l6-1c0-1-5-2-9-1l-1-1-9-2c-7%200-9-1-9-2v-1l-4%2010v-4c0-4%200-5-2-5h-8m109%2030v5l-1%203-1%201%201%204c0%203%204%203%205%200l2-2%201-1v-2c2-2%203-9%201-9-5-1-7%200-8%201'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.3274336283185841,"src":"/static/343d0ac0bcb4c4505d999fd744863ed5/4fe8c/setup.jpg","srcSet":"/static/343d0ac0bcb4c4505d999fd744863ed5/aabdf/setup.jpg 150w,\n/static/343d0ac0bcb4c4505d999fd744863ed5/9dc27/setup.jpg 300w,\n/static/343d0ac0bcb4c4505d999fd744863ed5/4fe8c/setup.jpg 600w,\n/static/343d0ac0bcb4c4505d999fd744863ed5/9842e/setup.jpg 900w,\n/static/343d0ac0bcb4c4505d999fd744863ed5/16310/setup.jpg 1024w","srcWebp":"/static/343d0ac0bcb4c4505d999fd744863ed5/ad85c/setup.webp","srcSetWebp":"/static/343d0ac0bcb4c4505d999fd744863ed5/e7487/setup.webp 150w,\n/static/343d0ac0bcb4c4505d999fd744863ed5/403a4/setup.webp 300w,\n/static/343d0ac0bcb4c4505d999fd744863ed5/ad85c/setup.webp 600w,\n/static/343d0ac0bcb4c4505d999fd744863ed5/210c1/setup.webp 900w,\n/static/343d0ac0bcb4c4505d999fd744863ed5/cc834/setup.webp 1024w","sizes":"(max-width: 600px) 100vw, 600px"}}},"slug":"dSLR-webcam-for-live-streaming","keywords":null}}},{"node":{"excerpt":"CSS is an oddly polarizing programming language. For years I've said to myself, and out loud on more than one occasion, that I 'hate' CSS. Over the years I've got to great lengths to avoid it entirely: Frameworks : I've used frameworks like Bootstrap to avoid needing to understand what was going on…","id":"de273d81-e411-5c93-8289-990bcd8f05a0","fields":{"title":"Mastering CSS as an Advanced Beginner","slug":"mastering-css-as-an-advanced-beginner","date":"2020-04-26T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Mastering CSS as an Advanced Beginner","date":"April 26, 2020","banner":null,"slug":"mastering-css-as-an-advanced-beginner","keywords":null}}},{"node":{"excerpt":"My friend and long-time collaborator Maggie Appleton delivered one of the most compelling talks on React I've ever seen at the online version of the Women of React conference. Here's the best part, the talk wasn't really about React! 🤯 Maggie delivered a  Trojan Horse learning surprise  the likes I…","id":"d434ec0f-cc4b-5c75-93a5-ee075ba9c4e3","fields":{"title":"React is a Potato Plant 🥔: Drawing the Invisible by Maggie Appleton","slug":"react-potato-plant","date":"2020-04-26T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"React is a Potato Plant 🥔: Drawing the Invisible by Maggie Appleton","date":"April 26, 2020","banner":null,"slug":"react-potato-plant","keywords":null}}},{"node":{"excerpt":"A good pair of headphones is something that every desk studio setup would benefit from. For me they always end up laying around on top of the desk with a long cord getting in my way and even potentially getting caught up in the wheels of my chaior and destroyed. These days I put an  Elevation Lab…","id":"217de569-84a7-5acc-9356-2b96a89b5f5d","fields":{"title":"Essential Gear: The Elevation Lab Anchor Pro Under Desk Headphone Hook","slug":"headphone-hook","date":"2020-04-24T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Essential Gear: The Elevation Lab Anchor Pro Under Desk Headphone Hook","date":"April 24, 2020","banner":null,"slug":"headphone-hook","keywords":null}}},{"node":{"excerpt":"Most boom arms are cheap pieces of shit that struggle to hold your mic still, make noise, don't hold their position, and are generally bad. They are \"fine\" and sort of do the job they were built to do but they make very high quality microphone boom arms so you don't have to waste money on cheap…","id":"b00ce30b-aff1-5402-8ca1-e81c1bce7d42","fields":{"title":"🎙 The best, highest quality microphone boom arm for your desk.","slug":"best-mic-boom","date":"2020-04-23T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"🎙 The best, highest quality microphone boom arm for your desk.","date":"April 23, 2020","banner":null,"slug":"best-mic-boom","keywords":null}}},{"node":{"excerpt":"We record a  lot  of video at egghead.io. As a fully distributed remote team we've got several channels of communication, but one of the most popular and useful channels for us is Zoom. Being able to talk face to face has a lot of benefits and allows for nuance and expression as well as mutual…","id":"843881ea-b774-5956-9a0b-0f60cae946fc","fields":{"title":"📼 Archiving Zoom Videos with Dropbox and Notion","slug":"archiving-zoom-videos-with-dropbox-and-notion","date":"2020-03-19T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"📼 Archiving Zoom Videos with Dropbox and Notion","date":"March 19, 2020","banner":null,"slug":"archiving-zoom-videos-with-dropbox-and-notion","keywords":null}}},{"node":{"excerpt":"I've spent the last 10 years working from the comfort and convenience of my home office. 6 of those years have been fcused on building a 100% completely distributed team for egghead.io. To add to the equation we also home educate our 5 kids and my home office has never had doors. 😂 I  do not…","id":"20788b69-9e4a-52cd-9d53-17eaf79c3d04","fields":{"title":"Work from Home","slug":"work-from-home","date":"2020-03-09T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Work from Home","date":"March 09, 2020","banner":null,"slug":"work-from-home","keywords":null}}},{"node":{"excerpt":"It can be useful to consider writing for a specific individual, alive or dead, doesn't matter. Just pick somebody and write to them. Explain your point in a context and tone that they would enjoy. There are many alternatives, but writing for \"everybody\" without a clear inteded audience is often too…","id":"60b1577d-a942-5159-b682-1bcf919be6b9","fields":{"title":"Write for somebody specific.","slug":"somebody-specific","date":"2020-03-06T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Write for somebody specific.","date":"March 06, 2020","banner":null,"slug":"somebody-specific","keywords":null}}},{"node":{"excerpt":"This is a collection of thoughts around the nature of our business from November 2018 and what it might look like going forward. Some of it was implemented, some not! Posting it here for posterity. We help content creators build a “community brand” around their knowledge, experience, and desire to…","id":"90806cac-3418-529c-a07e-207d74015d5c","fields":{"title":"🧠 skill recordings creator vision","slug":"creator-vision-2019","date":"2020-03-02T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"🧠 skill recordings creator vision","date":"March 02, 2020","banner":null,"slug":"creator-vision-2019","keywords":null}}},{"node":{"excerpt":"We (egghead) partnered with Dan Abramov and Maggie Appleton to help produce their online course Just JavaScript that explores the foundational mental models that surround JS as well as how those same mental models apply to programming in general. Dan's been thinking about these mental models for…","id":"231eb86e-adf2-5725-864f-1300f73a7b1d","fields":{"title":"Creating a self-paced email course with ConvertKit, Typeform, and Zapier","slug":"self-paced-email-course","date":"2020-02-19T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Creating a self-paced email course with ConvertKit, Typeform, and Zapier","date":"February 19, 2020","banner":null,"slug":"self-paced-email-course","keywords":null}}},{"node":{"excerpt":"Once you get your  dSLR setup as your webcam , you're likely going to want to start tweaking your environment to get the light dialed in so you look your best. The camera makes a huge difference, but with a few tweaks you can dial it in and really pop. This video is an excellent overview:\nimport…","id":"8d41a368-5ca7-52e7-8f72-7d8472d847f1","fields":{"title":"Improve the Lighting for Your Webcam Videos","slug":"improve-the-lighting-for-your-webcam-videos","date":"2020-01-28T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Improve the Lighting for Your Webcam Videos","date":"January 28, 2020","banner":null,"slug":"improve-the-lighting-for-your-webcam-videos","keywords":null}}},{"node":{"excerpt":"My experience is that people tend to take things literally, want to do too much, and think in binary terms by default. I'm a big fan of  evergreen newsletter sequences  that line up a series of emails that get sent to your email list once a week when they subscribe to your newsletter. The mechanics…","id":"4d17d7cb-f79b-5e23-afe3-aac362e42c48","fields":{"title":"Your Evergreen Newsletter Sequence is a Bonsai Tree","slug":"evergreen-newsletter-bonsai","date":"2020-01-24T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Your Evergreen Newsletter Sequence is a Bonsai Tree","date":"January 24, 2020","banner":null,"slug":"evergreen-newsletter-bonsai","keywords":null}}},{"node":{"excerpt":"Below is a chart that represents 10 years of concentrated effort. I started using Github in 2009, which was also the year that I landed my first full-time coding gig.  robotlegs  was the project I worked on and contributed to heavily for a full year. It was a ton of fun, great tech, and I owe so…","id":"306b9724-4249-5ecf-967a-e4f8d07cfc77","fields":{"title":"a decade of code (2009-2019)","slug":"a-decade-of-code","date":"2020-01-04T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"a decade of code (2009-2019)","date":"January 04, 2020","banner":null,"slug":"a-decade-of-code","keywords":null}}},{"node":{"excerpt":"I stopped participating in ad tracking in 2019 across most of the sites I have control over.  This means that I removed mixpanel and Google Analytics from those sites and to the extent possible stopped sending them data about how users use my sites. If you had of told me a few year ago that I'd stop…","id":"15b6ae9b-6951-5182-b140-aa8bd37212b5","fields":{"title":"ad tracking","slug":"ad-tracking","date":"2019-12-09T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"ad tracking","date":"December 09, 2019","banner":null,"slug":"ad-tracking","keywords":null}}},{"node":{"excerpt":"In 2019 I wrote more than the previous 5 years combined, at least publically. There's several places that I write that aren't as obvious. I spend quite a lot of time writing and curating  howtoegghead.com . I also write a lot of emails that go out on the  egghead newsletter . And then there are the…","id":"a3a2bba9-930d-5516-aac7-94e6e2122c1f","fields":{"title":"🖋 Stop Giving af and Start Writing More","slug":"on-writing-more","date":"2019-12-08T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"🖋 Stop Giving af and Start Writing More","date":"December 08, 2019","banner":null,"slug":"on-writing-more","keywords":null}}},{"node":{"excerpt":"Writing is  a subtle and nuanced craft. If you want people to read your words, it's on you to make it interesting and pleasing to their eyes and brains. Words have rhythm.","id":"0c804cee-609d-5044-8c51-c70f1c988b45","fields":{"title":"Don't just write words. Write music.","slug":"writing-with-rhythm","date":"2019-12-06T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Don't just write words. Write music.","date":"December 06, 2019","banner":null,"slug":"writing-with-rhythm","keywords":null}}},{"node":{"excerpt":"We crossed the $16M milestone on 2019-12-05, and I've been staring at the little charts Stripe shows on the dashboard.  For the first two years we were really trucking along. The new customers metric is interesting. You see it growing at a steady clip and then two years in a row in April it just…","id":"84c8fb7f-66af-5930-bf76-2537dbd63d6e","fields":{"title":"6 Years of Peddling JavaScript Tuts Online","slug":"16-in-6","date":"2019-12-05T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"6 Years of Peddling JavaScript Tuts Online","date":"December 05, 2019","banner":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='142'%20viewBox='0%200%20400%20142'%20preserveAspectRatio='none'%3e%3cpath%20d='M10%2011c-2%203-1%203%202%204%202%200%203-1%203-2h1c0%202%205%203%207%201h1c-1%203%201%202%202%200l1-1c0%202%201%202%205%202l5-1v-2c0-2-1-2-3-1l-4-1h-2l-2%201c-2%201-2%201-3-1h-2l-1%201h-6c0%202%200%202-2%200l-1-2-1%202m331%2045l-1%206h-5l-6-1h-4c-4%202-5%201-5-2-1-4-3-5-4-1s-4%206-10%203l-5-1c-1%201%209%204%2012%204s4-1%204-3l1-2v2c1%202%202%202%204%202h10c7%201%209%200%2010-4l1-4v3c0%203%201%204%202%205%202%201%206%200%206-2h-1c-4%203-5%201-6-7-1-7-3-6-3%202m20%200c-1%207-3%208-7%204h-1c0%202%203%204%206%204%202%200%203-2%203-6v-2l1%202c2%203%203%203%203-1%200-2%200-2%201%201%201%204%204%206%205%203l2-1%202-1c1-1%201-1%201%201%201%202%206%204%207%202%201-1%200-1-2-1s-3-1-4-3l-1-3-2%202-1%201c0-2-2-1-2%201-2%203-3%202-4-3-1-6-1-7-3-3l-1%202c0-6-2-5-3%201m4%2032c0%204%200%205-1%203-2-1-2-1-3%202-2%205-6%205-7%200l-2-4c-1%202-3%208-2%209l2-3v-2l1%202c0%202%201%203%205%203%203%200%204-1%204-3l1-2v2c1%203%203%202%203-2%200-3%200-3%201%201%201%205%204%205%205%200v-2l2%203c1%203%201%203%202%201l1-2%201%202c1%203%204%204%206%202l-2-1c-2%200-3-1-4-3-1-3-1-3-2-2%200%203-2%201-2-2%200-4-2-4-3%201-1%206-1%207-3%200-1-8-2-8-3-3m-24%2032c-1%203-2%203-8%203l-15%202c-4%201-9%202-11%201-3%200-5%200-6%202-2%202-4%202-14%202h-13l-15%201c-8%200-13%200-11%201h12c42-1%2039-1%2042-3%201-2%203-2%206-2%202%201%206%200%2011-1l9-2c10%201%2013%200%2014-3l1-3-2%202'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":2.830188679245283,"src":"/static/55984b70c09afff93666b91ab57c46f0/2a4de/monthly.png","srcSet":"/static/55984b70c09afff93666b91ab57c46f0/6d161/monthly.png 150w,\n/static/55984b70c09afff93666b91ab57c46f0/630fb/monthly.png 300w,\n/static/55984b70c09afff93666b91ab57c46f0/2a4de/monthly.png 600w,\n/static/55984b70c09afff93666b91ab57c46f0/db955/monthly.png 900w,\n/static/55984b70c09afff93666b91ab57c46f0/f3583/monthly.png 1200w,\n/static/55984b70c09afff93666b91ab57c46f0/d601e/monthly.png 1808w","srcWebp":"/static/55984b70c09afff93666b91ab57c46f0/ad85c/monthly.webp","srcSetWebp":"/static/55984b70c09afff93666b91ab57c46f0/e7487/monthly.webp 150w,\n/static/55984b70c09afff93666b91ab57c46f0/403a4/monthly.webp 300w,\n/static/55984b70c09afff93666b91ab57c46f0/ad85c/monthly.webp 600w,\n/static/55984b70c09afff93666b91ab57c46f0/210c1/monthly.webp 900w,\n/static/55984b70c09afff93666b91ab57c46f0/99238/monthly.webp 1200w,\n/static/55984b70c09afff93666b91ab57c46f0/536a1/monthly.webp 1808w","sizes":"(max-width: 600px) 100vw, 600px"}}},"slug":"16-in-6","keywords":null}}},{"node":{"excerpt":"We've been testing Basecamp at egghead. 2021-01-01 Update :  Basecamp didn't work out for us, and we ended up back on Slack for most day-to-day discussion and Roam for async co-thinking/planning. So far, it feels like a great tool to add to our general practice and hits a lot of sweet spots in terms…","id":"bbdf5661-9563-5d99-abab-f7a4770b6605","fields":{"title":"Team collaboration and productivity in 2020","slug":"productivity-in-2020","date":"2019-11-30T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Team collaboration and productivity in 2020","date":"November 30, 2019","banner":null,"slug":"productivity-in-2020","keywords":null}}},{"node":{"excerpt":"Building an email list is both art and science. The tactics aren't obvious. The skills are built over time with slow trial and error. It's really a pain in the ass sometimes. Over the years while building egghead's list to over 150,000 subscribers there has been one continuous shining light that I…","id":"d7ca8d77-7e00-5fb5-8c39-6589288f1198","fields":{"title":"Mastering ConverKit by Brennan Dunn","slug":"mastering-converkit","date":"2019-11-20T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Mastering ConverKit by Brennan Dunn","date":"November 20, 2019","banner":null,"slug":"mastering-converkit","keywords":null}}},{"node":{"excerpt":"Have you ever experienced the crippling fear of choosing a frontend framework to go deep on, to use for your next project, or to specialize in? We've got sparse time to spend learning, and how we choose to specialize is a critical aspect of being a web developer. It's a choice that makes a…","id":"052c4d36-17d0-5147-92f5-daa90d0a32f5","fields":{"title":"How do You Choose a Front-End Framework?","slug":"how-to-choose-a-framework","date":"2019-11-19T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"How do You Choose a Front-End Framework?","date":"November 19, 2019","banner":null,"slug":"how-to-choose-a-framework","keywords":null}}},{"node":{"excerpt":"We've got a robust Rails app that does a lot of heavy lifting for us. We've crafted a full hateos REST api with a delightful GraphQL layer over the top. We started using React as our primary UI a few years ago, and we do SSR via React on Rails. It's a great project and our pages are pretty fast…","id":"4a83ba90-59f9-524f-9d85-91cea0c44a50","fields":{"title":"🤠 Gatsby on Rails","slug":"gatsby-on-rails","date":"2019-11-17T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"🤠 Gatsby on Rails","date":"November 17, 2019","banner":null,"slug":"gatsby-on-rails","keywords":null}}},{"node":{"excerpt":"This is a question that comes up a lot: \"Should I use a framework?\" It's a good question, and something that I've both asked myself and thought about quite a lot over the years. Here's the thing... If you aren't using a framework there is a good chance that you are creating an ad-hoc, undocumented…","id":"a79327ce-96eb-5e4a-ae76-3ac4ae6f634d","fields":{"title":"🤔 \"Should I use a framework?\"","slug":"should-i-use-a-framework","date":"2019-11-14T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"🤔 \"Should I use a framework?\"","date":"November 14, 2019","banner":null,"slug":"should-i-use-a-framework","keywords":null}}},{"node":{"excerpt":"Serverless functions are incredibly convenient. Being able quickly and easily deply api endpoints with almost zero friction is luxurious! 🥰 One of my primary use cases for serverless functions has been to access and coordinate with third party APIs. If I'm deploying a static site with Gatsby for…","id":"5f292c76-a330-5177-9b49-27562521466a","fields":{"title":"Creating a Node.js serverless function as a proxy endpoint using express on Zeit Now","slug":"simple-serverless-now","date":"2019-10-22T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Creating a Node.js serverless function as a proxy endpoint using express on Zeit Now","date":"October 22, 2019","banner":null,"slug":"simple-serverless-now","keywords":null}}},{"node":{"excerpt":"Early on when I started learning about business there was a lot of advice about what type of business you can run. You've got Rich Dad Poor Dad describing a real estate empire or E-Myth talking about franchises as systems. It wasn't until I got deeper into it that the advice started to be more honed…","id":"ae3f2702-0e9a-5a55-9c74-6eb9f1cdaf74","fields":{"title":"💰 Making Other People Money","slug":"make-money","date":"2019-10-09T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"💰 Making Other People Money","date":"October 09, 2019","banner":null,"slug":"make-money","keywords":null}}},{"node":{"excerpt":"Being able to work remotely is probably one of the coolest fuckin things that's ever happened to me.  For well over a decade I've been able to wake up and commute myself 20 feet to my home office, sip a cup of my favorite fussy coffee, and work in the comfort of my favorite pair of sweat pants. It's…","id":"62e46642-9404-5ac2-8ae3-46025d71c6d0","fields":{"title":"Remote Work: Over Communicate with Context 🙏","slug":"remote-work","date":"2019-10-08T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Remote Work: Over Communicate with Context 🙏","date":"October 08, 2019","banner":null,"slug":"remote-work","keywords":null}}},{"node":{"excerpt":"The first live code workshop I did was at Adobe Max. It was a huge room, with tons of attendees. Since I'd never done, or even been to a technical workshop at that point I followed the direction that were given to me. The result was a thick booklet of dead tree paper given to each attendee to follow…","id":"b8390375-7ce7-506d-bddd-df378f43b5d2","fields":{"title":"🚌 Teaching Workshops","slug":"teaching-workshops","date":"2019-10-08T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"🚌 Teaching Workshops","date":"October 08, 2019","banner":null,"slug":"teaching-workshops","keywords":null}}},{"node":{"excerpt":"Have you used Jira? It's a hellscape of dates, swim lanes, buzzers, metrics, and productivity wanking that leads to an entire career option of full-time employment as a Jira wrangler. A \"project manager\" if you will.  At some point in our software journey the entire idea of product management…","id":"97675014-4674-54d3-99ab-e25ad89aca66","fields":{"title":"Instead of due dates we use next check-in dates for projects at egghead","slug":"instead-of-due-dates-we-use-next-check-in-dates-for-projects-at-egghead","date":"2019-10-03T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Instead of due dates we use next check-in dates for projects at egghead","date":"October 03, 2019","banner":null,"slug":"instead-of-due-dates-we-use-next-check-in-dates-for-projects-at-egghead","keywords":null}}},{"node":{"excerpt":"At egghead our workshops are accompanied by Really Good Notes.  Really Good Notes can take a variety of formats: sketch notes cheat sheets flash cards written notes code examples ??? They can be a  combination of those things  too, which is where good notes start to become Really Good Notes. A good…","id":"5760eb9f-bc09-5a82-a3a6-89811a7a9550","fields":{"title":"I ❤️ Really Good Notes","slug":"really-good-notes","date":"2019-09-26T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"I ❤️ Really Good Notes","date":"September 26, 2019","banner":null,"slug":"really-good-notes","keywords":null}}},{"node":{"excerpt":"The single biggest factor in continued success as a software developer, or any deeply rewarding career, is the practice of continued learning over time. Web development changes fast. Technology shifts. Innovations happen. For me, this realization came in November 2011 when Adobe made the…","id":"ded93f33-0998-544a-95fe-a7accb36a5a3","fields":{"title":"how to use egghead.io to level up as a web developer","slug":"using-egghead","date":"2019-09-26T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"how to use egghead.io to level up as a web developer","date":"September 26, 2019","banner":null,"slug":"using-egghead","keywords":null}}},{"node":{"excerpt":"Getting paid what you are worth and deserve doesn’t just happen. It’s up to you to get it. None of us are born negotiators. It takes practice. Fact is, we could all earn more if we were better salary negotiators. Take me, for instance. For my first several jobs, I was so freaking desperate to get…","id":"366e2daa-5a2d-552f-9fdc-6e05a9928b23","fields":{"title":"💰 salary negotiation for web developers","slug":"salary-negotiation","date":"2019-09-26T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"💰 salary negotiation for web developers","date":"September 26, 2019","banner":null,"slug":"salary-negotiation","keywords":null}}},{"node":{"excerpt":"I've spent a lot of time freelancing and will be filling this page in with what I know about doing it. Generally I send people to two resources: Double Your Freelancing from Brennan Dunn Kai Davis Both of these fellas produce amazing legit useful free content and have offerings for you to upgrade to…","id":"fb274808-f7f6-5e7e-bbe8-281af149eb95","fields":{"title":"What I know about freelancing as a developer","slug":"freelancing","date":"2019-09-24T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"What I know about freelancing as a developer","date":"September 24, 2019","banner":null,"slug":"freelancing","keywords":null}}},{"node":{"excerpt":"The Checklist Manifesto has a very solid underlying premise, but it is crammed full of anecdotes and ultimately boils down to \"a really good article\".  I think that checklists can be an excellent tool and facilitate higher level thought. My favorite idea for a \"checklist\" is  Amy Hoy's Pep . It's…","id":"793ce401-0f98-5178-983c-2146606d5edd","fields":{"title":"The Checklist Manifesto - Atul Gawande","slug":"the-checklist-manifesto","date":"2019-09-21T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"The Checklist Manifesto - Atul Gawande","date":"September 21, 2019","banner":null,"slug":"the-checklist-manifesto","keywords":null}}},{"node":{"excerpt":"An email list is a social network. You list is a lot like Twitter. Folks can sign up and get notified of updates. They can unsubscribe whenever they like, and resubscribe in the future. When you start to think about your list like this, it opens a lot of possibilities, and for me anyway, removes…","id":"bc5cd0af-76ec-5594-8137-904743e7d2f4","fields":{"title":"Starting your own social network with your mailing list","slug":"starting-your-own-social-network-with-your-mailing-list","date":"2019-08-24T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Starting your own social network with your mailing list","date":"August 24, 2019","banner":null,"slug":"starting-your-own-social-network-with-your-mailing-list","keywords":null}}},{"node":{"excerpt":"Thinking in Systems is a wonderful book by Donella H. Meadows who was an environmental scientist.  It is one of the most inspirational, terrifying, and absolutely essential texts that I've ever read. Systems thinking isn't the default. It's not something that I remember studying directly in school…","id":"964e005a-7fb3-5eff-8054-764ceb65a798","fields":{"title":"Review of Thinking in Systems: A Primer","slug":"review-of-thinking-in-systems-a-primer","date":"2019-08-23T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Review of Thinking in Systems: A Primer","date":"August 23, 2019","banner":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='187'%20viewBox='0%200%20400%20187'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%207l1%208v1L0%2040v23h3l3%201c1%201-2%205-4%205s-2%201-2%2014c0%208%200%2014%201%2013%201-3%2026-12%2028-11l-5%2010-7%2011-9%207c-7%205-8%206-8%2010%200%202%201%202%206-2l6-4-2%208c-3%208-5%2022-5%2024%202%204-1%203-3-1l-2-4v43h4l13-3a107%20107%200%200112-4c1-1%202%200%202%202l3%203%2010-5c3-3%204-2%201%202-4%205-4%205%200%205%202%200%203%200%202-2-1-3%206-10%2034-38%2021-20%2029-29%2028-30%200-1%202-5%206-9%208-10%208-10%200-4l-9%208c-2%200-3%202-2%202l-1%201c-1-1-1-1%200%200l-1%201c-1-1-3%200-5%202l-6%204-1%201c-1%202-8%206-9%205l5-8%2018-30c4-9%205-10%202-2s-7%2017-13%2025c-5%209-5%2010%201%204l4-6%206-13c6-13%2010-25%2012-36%201-6%202-6%205-9%205-3%205-3%205%201-3%2011-9%2027-16%2039l-4%208c1%200%2011-15%2014-23%203-6%204-6%204-2l1-3c3-4%206-15%207-22%201-5%2010-7%2014-3h2c-1-3-9-8-12-8-2%200-3-1-3-4-2-7-8-14-16-15-4%200-5-1-7-4-3-4-10-9-17-11l-6-2c-3-4-4-4-46-4H0v7m257%2022c-2%204%201%2010%205%209%202-1%202%200%202%201%200%202-1%202-3%202s-3%200-2%201l3%201c4%200%205-3%205-11v-5h-4c-4%200-5%200-6%202m-152%200l-2%202c2%204%203%2013%203%2019%200%207%200%207-3%209l-4%203v-7c0-7-1-16-3-21%200-2-1-2-2-1-2%201-2%201%200%206l2%2014%201%2011-4%203a80%2080%200%2000-17%2018c1%200%207-4%2014-11l15-13%2012-11-3%202-3%201v-8l-4-17-2%201m11%202l2%2010c0%208%200%208%205%205%203-2%204-5%202-10-2-4%200-4%202%200l2%202c0-3-6-9-10-10-3%200-3%200-3%203m28%2020l-2%206c-1%205-8%2019-13%2026-4%205-4%206-1%203%206-3%2018-25%2018-31%200-4-2-6-2-4m18%2018a307%20307%200%2000-22%2024l8-6c9-7%2021-23%2014-18M11%2074c-1%200-6%208-6%2011l6-2%2015-3c10-2%2010-2%207-4-2-2-17-3-22-2m22%2018l-5%209%207-3%208-3c2-1%202-1%200-6l-4-5-6%208m4%2012l-11%204c-5%202-12%2020-13%2031%200%207%200%207%206%202l12-10c8-6%2018-18%2018-21l-1-6c-1-5-1-5-11%200m145-3l-7%204-3%203%204-1h12l7-1h3v9h-10c-8-1-18%200-24%203l-2%201h2l3%201h13c13%200%2017%200%2014%202l-1%202c0%202%204-2%206-6%203-7%203-12-1-15-3-2-10-3-16-2m-90%2027c-5%206-10%2010-10%209l2-2%201-2c-1%200-11%208-23%2020-11%2010-14%2014-6%208l5-3c0%201-11%2011-16%2014-5%204-7%209-1%205%2010-6%2061-55%2061-58%200-2-3%200-13%209m38%201c-10%205-14%208-6%205%205-2%205-2%204%200l-8%207-6%205c1%201%202%200%205-2l25-20-14%205m36-3c-3%200-4%201-2%203v2c-1%201-1%201%202%201%204%200%207-1%207-3%200-1%203-2%207-1%203%200%204%202%201%202-1%201%200%201%202%201l3%201c0%202%205-3%206-5s0-2-11-2l-15%201m-6%208l-12%202c-5%202-3%202%204%201h5c2%202-1%204-9%206-8%201-9%202-2%201%209-1%208%202-1%205-4%201-4%201-1%201s3%200%202%202l-3%201-1%201-1%203-4%204c-2%203-6%205-15%207s-20%208-27%2015c-7%205-5%205%203%200%207-5%2023-11%2025-11%202%201-5%209-10%2012a312%20312%200%200053-33h-12l3-3c5%200%2010%200%209%202%200%202%202%201%208-5l7-6-9%201c-7%200-8%200-7-1%201-4%2010-5%2014-1%201%201%202%201%204-1l2-3h-25m28%205l-32%2026c-6%203-7%205-5%205s1%208-2%2012c-1%203-1%205%201%205s5-6%2010-16l4%201c4%201%206%204%205%2011-1%205-1%205%204%201%203-2%204-2%203-5%200-3%200-3%202-2%202%202%202%202%2011-6l13-14c3-3%205-6%206-5v-2h1l-3-3-2-1h2c2%201%203%201%203-1%201-2-4-7-10-9-7-2-7-2-11%203m23%2018c-5%206-14%2016-22%2022l-7%207%2013%201h13l3-4c5-5%2010-15%2010-19l-6-11-4%204m-111%204l-7%203h-1l-1%202v-1l-1-1-1%202h-1l-4%202a139%20139%200%2001-23%2014c-3%202-5%203-5%201l10-15%204-5c-1%200-17%2017-19%2021l-2%203h7l8-1h8l4-4a319%20319%200%200026-22l-2%201'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":2.142857142857143,"src":"/static/5e47a69b45b35530ed1bde022fb67007/2a4de/thinking-in-systems.png","srcSet":"/static/5e47a69b45b35530ed1bde022fb67007/6d161/thinking-in-systems.png 150w,\n/static/5e47a69b45b35530ed1bde022fb67007/630fb/thinking-in-systems.png 300w,\n/static/5e47a69b45b35530ed1bde022fb67007/2a4de/thinking-in-systems.png 600w,\n/static/5e47a69b45b35530ed1bde022fb67007/db955/thinking-in-systems.png 900w,\n/static/5e47a69b45b35530ed1bde022fb67007/f3583/thinking-in-systems.png 1200w,\n/static/5e47a69b45b35530ed1bde022fb67007/9ef5a/thinking-in-systems.png 1732w","srcWebp":"/static/5e47a69b45b35530ed1bde022fb67007/ad85c/thinking-in-systems.webp","srcSetWebp":"/static/5e47a69b45b35530ed1bde022fb67007/e7487/thinking-in-systems.webp 150w,\n/static/5e47a69b45b35530ed1bde022fb67007/403a4/thinking-in-systems.webp 300w,\n/static/5e47a69b45b35530ed1bde022fb67007/ad85c/thinking-in-systems.webp 600w,\n/static/5e47a69b45b35530ed1bde022fb67007/210c1/thinking-in-systems.webp 900w,\n/static/5e47a69b45b35530ed1bde022fb67007/99238/thinking-in-systems.webp 1200w,\n/static/5e47a69b45b35530ed1bde022fb67007/e4393/thinking-in-systems.webp 1732w","sizes":"(max-width: 600px) 100vw, 600px"}}},"slug":"review-of-thinking-in-systems-a-primer","keywords":null}}},{"node":{"excerpt":"Recording a podcast is a shitload of work. I'm not gonna try to polish that aspect of it and make it seem like it is anything but work. It's particularly difficult if you want to maintain it as a practice over time. That's true for most difficult things that are totally worth it. For me, podcasting…","id":"9dc6c231-86af-5e8d-a112-5ee12b7c09e8","fields":{"title":"I'm very proud of the egghead podcast.","slug":"the-egghead-podcast","date":"2019-08-23T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"I'm very proud of the egghead podcast.","date":"August 23, 2019","banner":null,"slug":"the-egghead-podcast","keywords":null}}},{"node":{"excerpt":"When we sit down to plan anything, the obvious choice is what we've been taught all of our lives.  Start from the beginning!  It makes sense. What's the first step? Once we know where to start, it's just a matter of working step by step to the finish line.  ✅ Done! This approach of starting at the…","id":"a189980a-c6f7-5cd2-865c-b4d434e81fef","fields":{"title":"Thinking Backwards is the Way to Plan","slug":"thinking-backwards-is-the-way-to-plan","date":"2019-04-04T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Thinking Backwards is the Way to Plan","date":"April 04, 2019","banner":null,"slug":"thinking-backwards-is-the-way-to-plan","keywords":null}}},{"node":{"excerpt":"If you want to  schedule an hour  to discuss your code, business, marketing plan, content strategy, or other endeavor I'd be happy to help.","id":"1c0f1901-1400-56fa-9a9d-780453c22332","fields":{"title":"60-minute Consultation on Your Project","slug":"consult","date":"2019-03-18T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"60-minute Consultation on Your Project","date":"March 18, 2019","banner":null,"slug":"consult","keywords":null}}},{"node":{"excerpt":"\"FUCK YOU SPAMMER!\" For the first year or so of egghead's existence I avoided sending email. I was nervous. I didn't even want to send receipts when we charged people, because I thought they'd see the receipt and just cancel leaving John and I destitute. That's an extreme outcome that wouldn't…","id":"775968fc-1921-56ec-94e1-21f34468b1c9","fields":{"title":"How I think about sending a lot of email.","slug":"how-i-think-about-sending-a-lot-of-email","date":"2019-03-18T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"How I think about sending a lot of email.","date":"March 18, 2019","banner":null,"slug":"how-i-think-about-sending-a-lot-of-email","keywords":null}}},{"node":{"excerpt":"For years I spent immense amounts of effort broadcasting one-off emails to to my newsletter. Millions of them! This is fine, a broadcast does the job of delivering your emails to the eager recipients at the other end of the wire. Mission accomplished, right? yes and no. The problem with this…","id":"d4ef8087-abef-5f65-818e-e8c21505a41a","fields":{"title":"🌲 Shadow Newsletter for Evergreen Emails in ConvertKit","slug":"shadow-newsletter-for-evergreen-emails-in-convertkit","date":"2019-03-07T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"🌲 Shadow Newsletter for Evergreen Emails in ConvertKit","date":"March 07, 2019","banner":null,"slug":"shadow-newsletter-for-evergreen-emails-in-convertkit","keywords":null}}},{"node":{"excerpt":"What is a badass? I love the word itself, because there is practically no way to use it in a negative way. It's a  good  word. In Kathy Sierra's book, the word  badass  is used to describe an expert. Somebody that has learned a skill, crossed the \"valley of suck\" and achieved mastery. You can buy…","id":"423a41b5-7d73-51bb-8040-40e9cf94ef60","fields":{"title":"Badass: Making Users Awesome by Kathy Sierra","slug":"badass-making-users-awesome-by-kathy-sierra","date":"2019-02-24T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Badass: Making Users Awesome by Kathy Sierra","date":"February 24, 2019","banner":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='300'%20viewBox='0%200%20400%20300'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2012v12h7l14-3%2025-2c23-1%2051-4%2054-5s2-3%206%2022a685%20685%200%20008%2041c2%205%205%208%2010%208v2l1-1a618%20618%200%200123%201c-17%200-17%201-17%203-1%202-1%202-3%201h-2c1%201%200%201-2%201h-3l-1%201h-1l-1%201-3%204-1%204%201%202-1%207-1%204v2l-1%201v3c1%201%201%202-1%206v5l-1%204-1%201%201%201v2h-3l2%202v3c3%202%202%203%200%202v1c1%201%201%201-1%202s-2%201%200%203c1%201%201%201-1%201v1c2%201%202%201%200%203v5c-2%200-1%202%201%202v3l-2%205v2c1-2%201-2%202-1l-1%204-1%201a427%20427%200%2000-1%2015c-1%201-1-6-1-34l1-35h-7a801%20801%200%2000-44%207l-2%202-9%201-6-1-2-2c-3%200-4%203-4%207%200%201%200%202-3%201-2%200-2%200%200%201%201%200%202%203%201%206v2l-1%203h3c6-1%207-1%208%202l-1%204-1%201c2%201%203%207%201%209l-6%202h-4v-5c0-4%200-6-1-5v1l-1%201v6l-1%202v3l-1%202v1c0%201%200%202-2%202-1-1-1-1%200%200l1%203c0%202-1%202-2%201-2%200-2%200-1%201s0%201-4%201h-5l-5%201c-5-1-6%200-6%201%200%202%202%202%2018%200h5l-5%2027-4%2027a497%20497%200%200052-9h1c2%201%202%201%203-2%200-2%201-2%203-2h2l-3-1c-2%200-2%200-2-4%200-3%201-4%204-4l3%201h1l5-2h5c1-2%202-1%203%201l1%203v-3c0-3%203-3%203%200%201%204%201%205-1%205h-4l-5%201c-1%200-2%200-1%201l-1%202v1h8c1-2%202-1%202%201s0%202%201%200c1-1%201-2%202-1h2l2%201%202%202h2l-1%201-76%209c-9%201-13%203-11%205a481%20481%200%200066-8c24-2%2022-2%2023-6l-1-3c-3%200-3-13-1-27l1-4%201-2v12l1%202h-1v15l1%202c0%203%205%203%2027%203a957%20957%200%200168%200c-17%200-20%201-20%204%200%202-3%205-7%206-4%200-5-1-5-6v-3h-12l-13%202c-1%201%200%202%201%202v1l-2%203c0%202-3%204-4%202l-1-6v-4h-6l-20%202%206%204c3%204%203%205%204%209%200%204-1%206-2%206-1%201-1%201%201%203%202%201%203%203%202%203l1%201%202%201%202%201%201%201%2011%201c9%200%2011%201%2011%202l1%201%201%201c-1%201%202%204%206%205l3%201-3%202c-2%201-2%201%200%201v1h3c5%200%209-2%206-2-2%200-2%200%200-1%201-1%202-1%201-2-4-1%207-5%2022-8h13c-1%203%201%204%205%203%202-1%204-1%206%201%207%204%2069%202%2075-3%203-2%2018-4%2019-3h8l10-1c3%200%203%200-2%202-7%202-6%203%201%202%205%200%206%200%205%201-2%201-2%201%201%201s3%200%202%202l-1%201c1%200%202%201%201%202l2%201c2-1%203%201%201%203-1%201-1%201%201%201%201%200%202%201%202%203l2%202c1%200%207-4%205-4l3-2%201-1%201-1%202-2h-2c-3%202-5%201-2-1l1-2%203-2c2%200%203-1%202-2%200-2%201-2%203-3h4l-5-1-4-1h3l6-3%204-1c6%200%2025-7%2025-9l-1-1v-1l3-1h1c1-1%200-1-1-1l-3-1h-1l-1-1%202-2c3%200%202-2-1-1h-2l2-2c2-1%202-1%201-2v-1c1%201%202%200%201-1l1-1h2l-2-1h-2l-4-1-2-1-2-1c-2%200-2%200-1-1%202-2%202-2%200-2l2-1%201-1c-2%200-1-1%202-2%208-4%208-3-13-52l-7-18%2016-1c14-1%2016-2%2017-3v-4l-1%201-2%201-1-1v-1l-1%201h-4c1%201%200%201-2%201h-4l-1%201h-13v2h-4l-1-2c-1%200-5-6-4-7l-1-1-1-2v-1c-1%201-3-5-2-6l-1-1c-2%201-1-1%201-2l1-2h-1c-2%202-3%203-2%201l-1-2c-1%200-3-4-2-5l-1-1v-1l-1-1c-1%200-4-7-3-8h-1l-1-2v-1l-2-2%201-4v-1l-1-1-1-2c-2-1-2-1%200-1%202%201%203%200%206-3l3-2h1l2-3v-1l2-1-1-1h-2l1-1h2l1%201c1-2%201-5-1-5l-2%201%201%201-1%201-1-1h-1c-2%201-2%201-2-1l-2-1-1-1h-1v-1c2-1%202-2%201-2-2%200-4%203-4%204v1l-1-3v-1c-2%200-2-1%200-3h1c-1%201%200%202%201%201%203%200%205-2%205-4h-3l-4%201v-3c2-6%203-7%204-6l1-1v-1l1-4c-1-1%200-4%201-5l4-13%208-22%205-13H0v12m236%2081h-11c-7%200-10%201-11%202h-4l-1-1-2%201c-2%202-5%202-5%201l-1-1-1%201v1l-2-1-1-1c-2%200-3%201-3%203s0%202%202%201c1-1%202-1%202%201%201%202%201%203-1%203l-1-1-1-1-3-1-2-1%205%205%201%201h-3l-1%201a138%20138%200%200038-1c3%200%205-3%204-5l3%202c2%202%205%203%203%201l1-1%202-1v-2l-1%201h-1c-1-3%200-4%201-4v1l1%201c1-1%202%200%202%201l1%201%202-4c0-2%202-1%202%201v1l-1%202c0%202%200%202-1%201h-1c-1%201%202%203%204%203%202-1%204-4%202-4v-1c2-2%202-2%200-2-2-1-2-1%200-3v-1l-2%201h-1l-2-2c-2%200-2%200-1%201%202%200%202%201%201%201l-2-1h-10m0%2021c-27%202-31%202-30%203a2219%202219%200%200030-3M90%20139c-5%201-5%208%201%2010%202%201%204%205%202%205l-1-2-3-1c-2%201-3%200-4-1l-2-2c-2%200-5-3-4-4l2%201c1%202%204%200%204-2-1-4-10-1-10%204%200%201%201%203%204%204l3%204-1%202-1-3-2-1-2%201v2c0%202-1%201-1-1-3-12-3-12-6-11l-3%201-1%209c0%208%200%209%202%208l2-2%201-2%201%202h5c0-2%201-2%202-1%202%202%207%200%209-3l1-1c1%202%206%203%208%201%203-2%202-8-1-10-4-2-5-3-4-4h1c1%202%204%201%204-1%200-1-2-4-3-3l-3%201m-35%208c-3%201-4%206-3%2014%201%204%201%204%204%203%208-1%208-1%207-11-1-7-2-8-8-6m86%200c-2%200-4%202-5%203-1%202-1%203%201%201s3-1%203%203a1000%201000%200%20000%2038l-1%2020h3c3-1%203-2%204-32%201-18%202-23%203-24v-3c0-3%200-3%202-2%202%200%202%200%201-1-2-3-7-4-11-3m-98%203l-3%2018c1%201%204-1%205-3%200-2%202-3%202%200l2%201c2%200%202-1%201-10-1-7-3-9-7-6m240%202c-3%200-7%203-8%205l-6%203h-2l2%201%202%201-2%204c-2%203-2%205-2%208%201%202%200%204-1%206v2h1c1-1%202-2%203-1l1%201%201%203c2%203%201%205-2%206l-1%201v1l1%204v3l1-4%202-4v3c-3%202%201%203%204%202%202-2%203-1%206%201%205%204%2013%208%2018%209%206%201%206%201%202-2-3-1-3-1%200%200%2013%202%2027%201%2032-4l3-1c1%202%204-4%206-11%202-11%200-16-10-25-3-2-4-4-3-4%201-1%201-1-1-1l-7-3c-12-5-30-8-40-4m12%2010l-3%201%204%202c5%202%209%206%209%209%200%201%202%202%205%202%204%200%203%207-1%2010-3%202-4%204-2%204l2%201c0%202-5%203-12%203h-3l10%203h6c6%201%208%200%2012-5%202-4%205-5%203%200-1%203-1%203%202%201%204-2%209-8%209-10l-3-7-2%201h-2c-2-2-5-1-4%201%200%203-3%203-5%201l-2-1-4-3c0-2%204-1%206%201%201%202%201%202%202%201l2-2%204-2%202-2-3-2c-8-7-23-10-32-7m-120%2025l1%2021c1%201%208%200%209-1%201-4-1-11-3-11s-2-1-2-3%200-3%202-3c1%201%201%200%201-2s0-2-2-1c-2%200-2%200-2-8s0-9%202-8l1-1-2-1-2-1h2c4%200%202-2-2-2h-4l1%2021M57%20204c-2%202-2%202-2%200-1-2-5-1-7%202-1%202-1%202-1%200%201-3%200-2-2%201l-1%204-1-4c0-4-1-4-3%201-2%203-2%203-2%201l-1-4-1%205c1%207%202%207%204%201l2-3v3l1%203c1%200%202-1%202-3%202-3%202-3%202-1s2%204%205%204c2-1%204-4%202-4l-1%201-2%201-2-1%202-2%203-1%205-1c3%202%203%204-1%204h-2c1%202%204%202%206%201%202-2%201-4-1-5-4-2-4-3%200-3h2c-1-2-4-2-6%200m141%2028l2%205%201%205h11v-11h-7l-7%201m-50%2013v2h-2v4c-3%200%201%202%205%202%205%201%2015-1%2014-3l1-1v-1l-1-2c-1-3-15-4-17-1m141%2025l-13%203-33%203-29%202c-3%200-4%203-1%203v1c-1%201%200%201%202%201l2%202%203%202c3%202%205%202%2025%202%2026%200%2036-1%2041-4l4-3v-1l1-2%201-1v-1c-2-1-2-1%202-3s4-2%202-2h-3l3-2h-7'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.3274336283185841,"src":"/static/a4021199e2f438eabcd3d590b8d7426a/2a4de/badass-kit.png","srcSet":"/static/a4021199e2f438eabcd3d590b8d7426a/6d161/badass-kit.png 150w,\n/static/a4021199e2f438eabcd3d590b8d7426a/630fb/badass-kit.png 300w,\n/static/a4021199e2f438eabcd3d590b8d7426a/2a4de/badass-kit.png 600w,\n/static/a4021199e2f438eabcd3d590b8d7426a/db955/badass-kit.png 900w,\n/static/a4021199e2f438eabcd3d590b8d7426a/f3583/badass-kit.png 1200w,\n/static/a4021199e2f438eabcd3d590b8d7426a/22f13/badass-kit.png 2048w","srcWebp":"/static/a4021199e2f438eabcd3d590b8d7426a/ad85c/badass-kit.webp","srcSetWebp":"/static/a4021199e2f438eabcd3d590b8d7426a/e7487/badass-kit.webp 150w,\n/static/a4021199e2f438eabcd3d590b8d7426a/403a4/badass-kit.webp 300w,\n/static/a4021199e2f438eabcd3d590b8d7426a/ad85c/badass-kit.webp 600w,\n/static/a4021199e2f438eabcd3d590b8d7426a/210c1/badass-kit.webp 900w,\n/static/a4021199e2f438eabcd3d590b8d7426a/99238/badass-kit.webp 1200w,\n/static/a4021199e2f438eabcd3d590b8d7426a/96ec1/badass-kit.webp 2048w","sizes":"(max-width: 600px) 100vw, 600px"}}},"slug":"badass-making-users-awesome-by-kathy-sierra","keywords":null}}},{"node":{"excerpt":"There are many ways to build a new feature for your applications. For me, when I need a new tool, component, or functionality I like to take a step back and think about it in terms of data. What data do I have, what data do I need, and how am I going to present and interact with the data. At egghead…","id":"674a3869-52d8-509f-9fbf-9111b665ca58","fields":{"title":"Transforming exported CSV data for use in a React chart.","slug":"transforming-exported-csv-data-for-use-in-a-chart","date":"2019-02-08T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Transforming exported CSV data for use in a React chart.","date":"February 08, 2019","banner":null,"slug":"transforming-exported-csv-data-for-use-in-a-chart","keywords":null}}},{"node":{"excerpt":"This blog is built with Gatsby and uses MDX for the post content. It's a great setup, and so far I've enjoyed using it very much. One thing I missed from my old Octopress/Jekyll configuration was the ability to run a rake task to create a new post with all of the basic required frontmatter metadata…","id":"b45e0e76-70dc-5eda-97a1-b861f1ff3427","fields":{"title":"A handy npm script for creating a new Gatsby blog post","slug":"a-handy-npm-script-for-creating-a-new-gatsby-blog-post","date":"2019-01-30T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"A handy npm script for creating a new Gatsby blog post","date":"January 30, 2019","banner":null,"slug":"a-handy-npm-script-for-creating-a-new-gatsby-blog-post","keywords":null}}},{"node":{"excerpt":"If you need to migrate your email list subscribers from Drip to  Convertkit , you will run into the problem of importing each of your tags as an individual list into  Convertkit . If you follow the  official recommendation , they suggest that you export each individual tag from Drip. With each…","id":"cbaa7c1e-eda5-5b9f-9543-40ea4e726e27","fields":{"title":"Exporting Drip Tags for Import into Convertkit","slug":"export-drip-tags-for-convertkit","date":"2019-01-15T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"Exporting Drip Tags for Import into Convertkit","date":"January 15, 2019","banner":null,"slug":"export-drip-tags-for-convertkit","keywords":null}}},{"node":{"excerpt":"I've done these posts for several years in a row, and this year as I sit down to write it out, there's a bit of a blank spot. 2018 was a pretty good year. But why? Hah, and more importantly why should  YOU  care?? These posts aren't about the reader though, mostly, they are about the author and a…","id":"e3cc36bb-dc75-506c-901b-7a322ab22d57","fields":{"title":"2018 in Review","slug":"2018-in-review","date":"2019-01-04T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"2018 in Review","date":"January 04, 2019","banner":null,"slug":"2018-in-review","keywords":["planning","systems"]}}},{"node":{"excerpt":"This exists to populate GraphQL fields and avoid null errors. It should contain all of the available frontmatter.","id":"488c6ed6-afcf-51b9-8ec4-b19671a87e79","fields":{"title":"this post is a ghost","slug":"invisible-post","date":"2019-01-01T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"this post is a ghost","date":"January 01, 2019","banner":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='277'%20viewBox='0%200%20400%20277'%20preserveAspectRatio='none'%3e%3cpath%20d='M21%202l1%206c0%205%202%209%204%208s4%203%205%2012l1%2018c-1-4-1-2-2%206a204%20204%200%20010%2023l2-12%201-10v6l-1%2011c0%209-1%2010-2%209l-1%202c0%202%200%202-1%201-1-2-1-2-2%202l-1%205h-1c0-2-2-1-5%201-1%202-4%203-5%203l-2%204v9l1%202%201%202v-6c0-4%201-5%204-2l2%201h2l1-3c0-2%200-2%201-1%201%203%200%2013-1%2012l-1%201%201%201v1c-1%202-4%200-4-3l-1-1c-2%200-2%201-1%203v4c-2%201-2%202-1%202v2l-1%203c0%204-1%207-2%206l-1-2-2-2c-4%200-4%202-1%203l2%203%202%201%201%203c0%202%200%202-1%201l-3-2-1-1c1-2-2-2-3%200l-1%203v-3l-1-2%201-1c2-2%202-2%200-2l-1-1-2-1c-1%200-2%200-1%201v13c-1%207-1%208%201%207%203-1%205%200%205%202l1%201%201%201-1%201-2%202c-1%201-1%200-1-2%200-4-1-5-3-3s-2%206-2%2064v63h19l20-1h1l28%201h28v-2l1-3%201%203v2h51v-3l1-4c2%200%202%200%201%203v4h6c5%200%206%200%205-2l1-1%201%202%2012%201%2011-1-2-1v-10c0-11-1-13-2-12l-1-2-1-2h-1l-2%201c-2-1-2-1-2%204%200%208-4%2011-6%205l-1-2c-1%201-1%201-1-1l-1-2-1-4-3-8-1-10c0-2-1-2-4-2l-5-1v-2l1-1-3-1c-1%200-2-1-2-3-1-3-1-3-2-1h-1l-3-2c-1%201-1%201%200%200%202-1-2-3-7-3h-3l2%2011h1l1%201-1%202c-2%201-1%202%202%201%202%200%202%200%202%202l-1%203-2%202c-1%201-2%202-5%202s-3-1-3-4c0-2-1-3-2-3l-1-1-2-1c-1%200-1-2%201-6l-1-2s-2%202-2%205c-1%204-1%204-2%202v-5c1-2%201-2-2-2s-4-1-1-4c1-2%200-3-3-2s-3%201-3%208l1%208v1l2%205%201-4c-1-5%201-11%202-11l1%204%201%205c1%201%201%201-1%201-1%201-2%202-1%203%201%203%200%207-1%207l-2-2c-1-3-3-3-4%200%200%203%200%203-1%202l-2-4-1-3-1-2-2-1c0-1%201-2%202-1l1-4-1-5v-28l1-2c0-5%200-6%202-6l1-1-2-1-1-2c0-3%200-4%202-1h2v-6c-1-1-2-1-4%201l-2%202-2-8-1-12v-10l-1%201-1-1c-1-2-1-1-1%203v9c-2%200-2%200%200%202v1l-2%201h-1l-1-5-1-15%201-14c1%204%204%203%204-2l2-2c1%200%202%200%201-1l-1-6c0-4%201-5%202-5%202%200%202-1%203-3%200-3%202-5%203-3%202%202%202%202%202%200%201-4%203-4%205-1%201%204%203%203%204%200l1-2c0%202%200%202%202%201%201-1%201-1%202%201%200%202%201%202%202%201%202-1%206%201%204%202l1%202v1c-2%200-1%202%201%204%203%202%203%203%202%208%200%2012%200%2014%202%209%201-2%201-2%202%200l2%202c2%200%202%200%201-1-2-1-2-1-1-2%202-1%202-1%202-4v-3l2%206%201%204v5h2l1-12c0-14%200-16%202-13h1l-1-2c-2%200-2-2-1-2v-1c-2%200-2-14%201-14l1%201h3c2%200%203%200%204%202l4%204%203%204%204%202%203%201%202%202c2%201%202%201%200%201l-3%201h-3c-4%200-4%202%200%203%203%200%203%200%202%201-2%201-2%201%200%201%201-1%202%200%202%201%201%201%206%202%206%200l1-1%201%201c-1%203%204%204%209%203l5-1h-4c-4%200-2-2%202-2%203%200%204%201%202%203v1h1c2-1%206-1%207%201l-1%202c-1%201%200%203%201%203l3%202%203%201%203%202h4v-2c-3-1-2-3%201-2%204%201%200%2011-10%2023-6%207-6%209-2%208%202-1%203%200%201%201l-2%203c0%202%200%202%201%201l1-1c1%200%202-1%202-3l3-3%202-1c1-3%205-4%205-2-1%202%200%202%201%202l2-1-1-2-2-1-1-2v-1l2%201%201%201c1%200%2010-13%2010-15l3-7%203-6-1%201c-1%202-2%202-2%201-1-1-1%200-2%203l-2%204v3l-1%201-1%202-1%203-4%205c0%202-2%203-4%202-2-2-1-3%201-4s4-3%205-6c4-10%208-16%209-15%202%200%204-10%203-12v-1l2%201%202-3c2-4%202-4%201-7-2-2-3-1%2012-24%202-3%203-6%202-7%200-2%200-2%201-1h1c0-2%206-11%206-8l1-1%201-4c-1%200%201-5%204-8%202-1%203-4%204-7l4-8%202-5c0-3-9%208-11%2012l-2%204-1-3-1%201c1%202%201%202-2%202h-1v1c-2%200-4-1-5-4l-3-2c-2%200-2%200%200-2h-2c-2%200-3%200-2-1l2-2c2%200%202%200%201-1h-8l-7%201a665%20665%200%2000-7-2c1-2-1-4-3-4l-2-1c0-2-6-7-7-7l-2-1%202-2-1-1c-1-2-1-2%202-2h3l-3-1-5-2c-1-1-3-1-3%202-1%202%200%202%201%203%202%200%203%202%201%202v2c0%202-1%201-4-1l-4-2-1-2-1-2-1%202c0%202-1%201-4-2-4-5-3-7%201-3%201%202%202%202%204%201l1-1c-2%200-2-1-2-4%201-6%200-7-5-7-3%200-6%201-2%201l3%201-3%201c-2-1-3-1-2%203l-1%203c-2%200-2-1-1-2l-1-2-1%205v7c-4%203-7-4-6-12%200-4-1-6-2-2l-2%201h-1l2%202c2%201%201%207-1%208l-3%201c0%202-2%203-2%200l-3-1c-2%201-3%201-3-1l-2-1-3-1c0-1-4-2-5-1l-3%201-4%201h-6l-2-1-2-2-2-1-1%202c0%202-1%202-2%202l-3-1-1-1c0-2-2-2-3-1l-5%201h-5v5c0%204-1%205-2%205l-1%201c0%203-6%203-8%201s-10-2-11%201c0%201-1%202-3%201-3%200-4-3-1-7l1-3%201-2c1-1%201-1-1-2-2%200-2-2-2-6l-1-1-1%204c0%203%200%203-2%203h-3c0%202-2%202-2%200h-5c-1-2-5-2-5-1l-1%201-2-1%202-1%201-1h-2c-1%200-2%200-2-2-1-1%200-2%201-2l1-1-1-1-2-2c1-2%201-3%206-3%204-1%203-1-6-1L56%201H41l-1-1-1%201%201%205h-1l-1%201c-1-1-2%200-2%201l2%201%201%201h-3c-2-1-2-7%200-6%201%200%202%200%202-2l-1-1h-2l-8-1c-5%200-6%200-6%202m100-1c-2%201-1%203%201%202%203-2%204-1%204%201l2%202c2%200%202%201%202%203l1%203%201%202c1%201%201%200%201-2l-1-3c-1-1%202-7%204-7l1%203v5c0%203%203%202%203%200l-1-2V7l1-4V0h-9l-10%201m93%200c0%201%203%203%204%202%203-1%207%201%207%203l2%202%202%201c-1%201%201%203%205%204l3%201c0%201%204%202%207%201h3l1-3V9c7%200%207-1%201-2-3-1-4-1-3-2h11c2-1%202-1%200-1-3%200-4-1-2-2l1-1h-3c-4%202-6%203-4%201%201-2-2-2-17-2l-18%201m44%200l7%202%207%201%202%201v2c-2%202-1%202%205%202%2016%202%2020%203%2018%204-3%202%205%205%2013%205l2%201%202%201%202%202c1%202%201%202%204%202h5l-3%201c-2%200-2%200-1%201v2c-2%200-1%202%201%202%202%201%202%201%200%201s-2%200-1%201v1h-1l-2%201-3%201h35c1%200%202%200%202%202%200%203%200%203%208%203%205%201%207%201%206%202v1l2-1%206-1h3l-3-2h3l4%201%201%201c2-2%201-3-1-3l7-2%209-2%202-1%201-17V0h-31c-23%200-31%201-32%202s-17%202-36%202c-4%200-5-2%200-2%203%200%203%200%202-1l-8-1c-4%200-5%200-3%201%202%200%202%201%201%201h-5c-4-2-32-3-30-1M49%2014l-1%202-2%202%201%202%201%203v2l-1%204c1%203%200%204-1%202l-2-1%201%202v11l2-2c1-3%201-3%201-1l1-1%201-2%201%202%201%202%202%201c1%201%202%201%202-4s0-6%202-6v-1c-2%200-2-1-1-1%201-1%200-4-2-4l-2-8c1-5%200-7-1-6h-2l-1-1v3m233%2013c-2%202-1%204%202%204l1%201%201%201c1-1%203%200%205%202%202%203%203%204%204%203%202-1%207%200%209%201v3c0%202%200%202%201%201h8l-2-2c-3%200-3%200-2-3%200-2%200-3-2-3l-7-2c-2-1-5-2-6-4-4-2-10-3-12-2M10%2042v12l1-2%201-2c1-2%201-2%201%201l-3%2010-3%2016-2%2017c0-3%202-2%201%201l1%203%202%201c2%200%202%200%200-3v-4l1-5%203-11a72%2072%200%20005-20c0-2%200-3-2-3-2-1-2-2-2-5l-3-12-1%206m60-2c-1%201-2%202-1%203l-1%202-2%201%201%201v9l-2%204c-1%201-1%204%202%208%202%205%204%206%202%202-1-6-1-15%202-19l3-6%201-5c1-2-3-2-5%200m315%203c0%203-3%205-8%205l-5%201c-2%201-2%202%201%203l4%201h-4l-8-1c-3%200-4%200-4-2l-3-2c-1%200-2%200-1%201l2%201%201%201-6-1c-4-4-6-3-7%201l-1%205-1-4c1-4%201-4-1-4l-3-1c0-2-4-1-5%201l-1%202-1%201v5l-1%202-1-5c0-5-1-7-6-5-2%201-3%204-1%204%202%201%200%208-1%208l-1%202h2c1-2%201-2%201%201v9c1%205%200%207-2%205s-3-1-3%201l-2%202c-2%200-5%205-3%206l1%202c0%201%203%201%205-1s3-2%202-3c-3-2%200-2%203-1l3%201%202%201%202%201c1-1%205%203%205%204-1%201-7%200-9-2h-4c-3%202-6%207-3%208l-1%202v2c2%202%200%205-3%205s-6%205-6%209c0%201%200%202-1%201l-2%201-2%202-2%202-4%201-1%201c0%202-3%201-3%200l-2-2c-4%200-1-13%203-16l4-7c3-4%205-9%207-10l2-4-8%209-2%204-3%205-1%202-2%202-1%201-1-2v3c1%202-4%2011-5%209v-3l1-2-1%201c-1%202-6%200-11-3-7-5-12-7-13-6l-1-1h-2c-2%201-2%202-1%202h2l2%201%204%203%202%201%202%201%204%202%2010%207%2012%209%206%205%204%202%201%202%204%202%203%202-2%201-2%201%203%201%201%201%201-1%202-2%202%201%203%201c3-1%203-1%202%202-1%201-2%202-3%201h-4l-1%201%201%201-5%205-2%202c-1%202%201%203%202%201s4-2%207-2l-1%201-2%202v3l1%203c1%201%201%200%201-1l2-6%203-5h-6l3-1c2%200%203-1%203-2l2-1%202%201c4%200%201%207-4%2011l-3%203-1%202v1l-2%203-2%203h-3l1%201%201%202-1%201h-2v1l1%203h-2c0-2%200-2-2-1-1%202-1%203%201%203s1%202-3%203c-2%201-2%201%200%201%203%200%202%204-2%204-2%200-3%200-2%201l-1%201v2c0%202%200%202-4%202-3%200-4%200-4%202l-1%202-1-1-1-1c-1-1-4%200-3%201l-1%201c-1%200-2-1-1-2%201-3-3-2-4%201l-3%202v1l4%201c3-1%204%200%201%203-1%201-1%202%202%202%203%201%204%206%201%207v-1c1-1%201-2-1-3-1-2-1-2-1%200%200%206-1%207-4%203l-2-2h-6l-2-3-1-1-1-2c-1-3-6-4-7-1-2%203-2%207%200%209l1%202v1l2-1c2-2%2012-2%2012%201l-1%201-1-1-2-1c-1%200-1%206%201%208h4l-1-1-2-1c0-2%208%200%2010%201l5%201c6%200%208%202%206%206l-1%205c0%204-2%209-4%209h-2c-1%200-1-2%202-4%202-2%202-4%203-9v-6l-2%202-2%204h-2c1%201%200%204-2%207l-2%207v20c2%200%203%202%201%203v2c3%202%204%201%204-4l3-1h3l-3-1c-2%200-2-1-1-1h2l1-2c0-1%200-2%201-1l1-3%201-5c2-4%203%202%203%2014%200%2011%200%2011%202%2011%201%200%202-1%202-3%201-2%200-3-1-3v-10l2%201%202%203%203%205c0%202%201%203%202%203l1%201-2%201c-1-1-2%200-2%201-1%201%200%201%202%201%203%200%204%200%203-2l1-2c1-1%201%200%201%201%200%203%200%203%203%203%202%200%202%200%202-6a215%20215%200%20011-13c0-1%201-2%203-2%202-1%204%200%202%201v2l2%208%201%206%201%201c2%204%2011%204%2011%201l3-3c2-1%202-1%202%202v3h23c19%200%2022%200%2022-2l1-1c1%201%204-3%203-3l1-4v-4c-2%200-1-15%200-15v-1l-1-1%201-2v-1l-1-1%201-2v-4l1-98V40h-10l-1%205%201%2011v24l-1-3c0-4-2-7-4-7-1%200-1-1%201-1%202-1%202-4%200-6v-5l1-9%201-6%201-1-1-1h-2l-1-1v3m-107%206l-4%208c-3%206-4%207-2%205h4l2-1c0-1%201-1%202%201%201%201%201%201%201-2v-3l1%202%201%201%201-2v-2h1l1%201v-3l-2-2c0%204-3%201-2-2%200-5-2-6-4-1m90%209l-3%202-1%202-1%201-1-2c0-2-2-2-2%200-1%204-3%204-4%200s-2-4-5-1l-3%201c-1-1-1-1-3%201l-2%201c-1-4-2%201-1%205l2%203h1l1%201c1%200%202-1%201-2l-2-2-1-1%201-1%201-2%202%201c1%202%202%203%201%207-1%208-1%209%201%209s2%200%201%201c-3%201-4%205-2%205l2-2%201-2c1%200%204%206%203%208%200%202-3%203-3%201l-3-2-4-1c-2-2-5%201-5%204%201%203%203%204%203%201l3-2v2l-1%201v1l2%203c1%202%205%200%205-2s5-1%206%201c3%202%202%202-1%206-3%203-2%204%202%201l4-2c1%201-1%202-6%205l-3%203v2l-1%201c-1-1-3%203-1%205h1l6-6%202-1c1-2%204-3%203-1l2%201c4%200%207%203%207%206l1%206%201-1%202-2v10l1%201c0%202%202%203%203%202%202-1%201-3%200-3-3%201-2-4%200-5v-1l-1-1h2c2%200%202%200%202-2v-2l1%202%201%204v6c0%204%200%204%201%202l1-13v-18c-2%200-1-6%201-7v-1c-3-1-2-5%200-4%202%200%203-1%203-3l-1-2-1-2c0-1%200-2-1-1-2%200-3-3-3-6l-1-2v2l-2-1-3-3c0%201-1%201-1-1l-3-1h-4l-1-4c1-4%203-4%202%200%200%203%200%203%203-1%202-2%202-3%201-3-4%201-6%200-5-1v-3l-2-2c0-1-1-1-2%201m-10%2010l2%203c1%200%202%201%202%205%200%203%200%204-1%203-1-2-2%200-1%203l-1%203-1%204-1%203c-2%201-1%203%201%203l2%201c0%202%205%200%205-2l1-4%202-2-3%201-3-1c0-2%200-2%202-1%201%201%201%201%201-1l2-6c1-3%201-5-2-4l-1-2v-3l1-2c2-2%203-3%202-4l-2%201h-5l-1-1-1%203M46%2075l-3%203c-2%200-2%201-1%201v1l-1%208-2%201v1c2%200%201%202-1%202l-2%201-2%204-2%204%208%201h8V89l1-6v-1l-1-4c0-4%200-5-2-3m16%203v6l-1%203c-2%200-2%200-1%201l1%202-2-1c-1-2-1-1-1%203l-1%203c-1-1-3%204-2%206l3-1h6c1%202%203-12%204-20%200-4%200-4-3-4s-3%200-3%202m119%2016l-2%203-2%203c-2%201-3%202-2%203%202%202%207%204%208%203h1c-1%201%200%202%201%203%203%200%204-1%203-3l1-3V93c-2-2-5-1-8%201m139%2021l-2%201-5%204v1l-2%202-1%201v-3l-1-1-1%203c0%202%200%202-1%201h-3l-2-1%201%202%203%203h1l-1%201c-1%201%206%206%208%206l-1-2c0-3%200-2%206%203%203%203%208%204%208%202l1-2c1%200%202-1%202-3v-4l-2-7c-2%202-4%201-3-1l1-2%201-1-2-1-2-1c-1-1-3-3-3-1m-42%2022l-1%201-2%202-1%202c-2%200-8%2012-10%2017l-1%203-1%203-2%205-2%202v-9c0-13%200-12-2-12-1%200-2%202-2%2011%200%2013%200%2015%203%2013h1l-2%202-1%204c1%201%201%202-1%202-1%200-2%200-2%203l-1%203-1%202-3%201-2%204c-1%203-1%203-1%201%200-1%200-2-1-1l-2%201v6h1l1-2v4l-1%203-2%204-3%205-4%207c-3%207-3%2010%201%206%202-1%202-1%203%204a29%2029%200%20011%207v21c0%204%200%205%201%204%201-2%201-1%201%203-1%204-1%205%201%205l1%202v1c2%200%203-6%201-7-1%200-1-2%201-2%201%200%202-2%200-2l-2-12a280%20280%200%2000-2-31l1-2%201-2%201-3c2-2%202-2%204%200l4%203-4-10v-2l1-2%201-2v-2c-1-2-1-3%201-3l1-1%201-3%202-2c1-1%201%201%201%205v6a174%20174%200%2001-1%2026l-1-3v3l1%204c1%200%202%201%202%204v10l-1%202h1c1-1%201%200%202%202l1%204v-19c-2-4-2-5%200-6v-3l-1-2v-5c-2-3-2-3%200-4v-6l1-2c2-1%203-3%201-3l-1-5-1-8v-5l2-8%203-8v-2h2v-2a117%20117%200%200013-30M73%20162v4c-1%201-1%201%201%202%201%202%202%203%201%204%200%202%200%203%202%204%202%202%202%202-1%202-4-1-4-1-4%202l1%202%201-1c-1-2%201-3%203-1%201%201%204%200%204-1v-2c2%200%202-1%201-2v-2l-2-3c-2-1-3-2-2-5l-1-3-1-1c1-1-1-2-3-2v3m89-1c-3%200-3%206%200%208l2%204v3l-1%203c-3%203-2%204%203%204%202%200%202%200%201%201l-2%201h4l-2%201c-2%201-2%201-1%202l2%201-2%201v1c3%200%202%208%200%208-2%201-2%201%200%201l3%201v8l1%203%201%209%201-3%201-2%201-6%201-6v-1l1-1c2-1%202-5%201-18-1-10-2-10-2%201%200%206%200%208-1%207l-1-2v-4c-2-5-3-20-2-22%201%200-5-5-6-4l-3%201m66%2022l-1%205-1%202-2%201a1001%201001%200%2001-1%204l-2%201%201%201%201%201h-4v5c2%202%201%203-1%203l-2-1c0-1-1-1-1%201l-9%2011v2c1%200%201%201-1%202-2%203%200%202%204-1s6-7%205-10h3c0-2%200-2%202%200v3l-1%201-3%204-5%208%206-5c4-4%204-4%204-2l-1%203c-1-1-4%202-3%204l-1%202-2%202c0%202%202%201%204-1%203-4%204-3%203%205l1%207c1%201%200%204-2%206h-2v2c-2%200-1%204%201%206%203%201%203%2017%201%2017-1%200-2%201-2%203s0%202%204%202h5l1-6a202%20202%200%20000-44l2-11v-2l2-10c1%200%203-7%203-12v-4l-2%203c-2%204-2%204-1-2v-7l-2-3-1%204m153%201v16l1%204c1%202%201%202%204%202l4%201-3%201c-3%200-4%200-4%202l2%202%201-1%202-2c1%200%202%200%201%202l2%201v1c-2%202-3%207-1%207l2%202%201%203v-10c-1-1-1-2%201-2l1-2v-3l-1-19c-1-4-3-4-4%200%200%203-2%204-2%202%200-3-3-9-5-9l-2%202m-17%2028l-1%206a6110%206110%200%20015%2027c0-2%201-3%202-3l1-11c0-6%200-9-1-8s-1%201-1-1c0-1%200-2%201-1l1-2c0-3-1-3-4-3-2%200-2-1-2-5l-1-4v5m-7%208l-1%2012c-2%200-2%205%201%207%201%201%200%202-2%201l-1%201%202%202c3-1%205%204%205%2011%200%205%201%207%202%207v-2l1-3c1-1%201-1%201%206l1%204v2c-1%201-1%201%201%201s2-1%200-15c0-3%200-4%201-2%201%201%201%201%201-1l-1-2-2-2a254%20254%200%2000-8-39c-1%200-2%202-1%2012m-108%2030l1%202v5l1%207c1%202%200%208-1%208l-1-2-2%202c-1%204%200%205%204%205h4l-1-9c0-15-1-20-3-20l-2%202'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":1.4423076923076923,"src":"/static/a0aae7e2208a4cf6a84775ed04ca46f9/4fe8c/banner.jpg","srcSet":"/static/a0aae7e2208a4cf6a84775ed04ca46f9/aabdf/banner.jpg 150w,\n/static/a0aae7e2208a4cf6a84775ed04ca46f9/9dc27/banner.jpg 300w,\n/static/a0aae7e2208a4cf6a84775ed04ca46f9/4fe8c/banner.jpg 600w,\n/static/a0aae7e2208a4cf6a84775ed04ca46f9/9842e/banner.jpg 900w,\n/static/a0aae7e2208a4cf6a84775ed04ca46f9/16310/banner.jpg 1024w","srcWebp":"/static/a0aae7e2208a4cf6a84775ed04ca46f9/ad85c/banner.webp","srcSetWebp":"/static/a0aae7e2208a4cf6a84775ed04ca46f9/e7487/banner.webp 150w,\n/static/a0aae7e2208a4cf6a84775ed04ca46f9/403a4/banner.webp 300w,\n/static/a0aae7e2208a4cf6a84775ed04ca46f9/ad85c/banner.webp 600w,\n/static/a0aae7e2208a4cf6a84775ed04ca46f9/210c1/banner.webp 900w,\n/static/a0aae7e2208a4cf6a84775ed04ca46f9/cc834/banner.webp 1024w","sizes":"(max-width: 600px) 100vw, 600px"}}},"slug":"invisible-post","keywords":["test"]}}},{"node":{"excerpt":"We don’t have a  single  test covering our front-end/UI for egghead.io. It’s  embarrassing. You know how it is. Testing is a good idea. It’s objectively better than the opposite, which in our case is click testing, twitter notifications, and relying on our user base to “smoke test” the application…","id":"2e842e11-3a1d-5c65-b6d1-e1475f910e98","fields":{"title":"I've got a confession to make 😭","slug":"blog/2018/10/02/ive-got-a-confession-to-make","date":"2018-10-02T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"I've got a confession to make 😭","date":"October 02, 2018","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"egghead.io is a platform to empower humans, built to challenge the status quo of how we work and learn new skills. We produce high quality, concise web development screencasts created by expert open-source contributors and other talented professionals. While we offer a lot of this content for free…","id":"71a00fe8-9a13-5efb-8e8c-16c0a08fe604","fields":{"title":"how we work at egghead.io in 2018","slug":"blog/2018/02/15/how-we-work-at-egghead-dot-io","date":"2018-02-15T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"how we work at egghead.io in 2018","date":"February 15, 2018","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Make all the big life changes at once... In 2016 we moved our family of 6 out of our home of 15 years across the country to settle in Vancouver, WA. That's quite a lot of change for everybody involved. My partner lived her entire life in Fort Worth, TX. Her family was, for the most part, within a 2…","id":"37e3a85f-3b1c-5dc3-84d5-ee4fc8cf9405","fields":{"title":"Living and learning in 2017","slug":"blog/2018/01/01/what-i-learned-and-did-in-2017","date":"2018-01-01T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Living and learning in 2017","date":"January 01, 2018","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Over the past few years we have built egghead.io from a relatively simple “video blog” and into a full blown platform for developers to publish their knowledge about software development as screencasts and get paid for it. The process has been intense! Every step of the way was a new road block…","id":"5dd41835-fe85-53a9-a724-567ea2b738fb","fields":{"title":"Why we hire consultants to help build egghead.io","slug":"blog/2017/10/26/why-we-hire-consultants-to-help-build-egghead-dot-io","date":"2017-10-26T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Why we hire consultants to help build egghead.io","date":"October 26, 2017","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"2016 as a year took a lot of criticism as a year. Beloved celebrities died in a seemingly endless parade of \"noooooooo\". We were subjected to a painful and divisive US federal election cycle, which resulted in another shameless ass-clown getting elected to the highest office in the land. The entire…","id":"3a3c1e47-cdcd-5f38-85b3-c7af2e313167","fields":{"title":"2016 was amazing. Best year yet.","slug":"blog/2017/01/02/2016-was-amazing-best-year-yet","date":"2017-01-02T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"2016 was amazing. Best year yet.","date":"January 02, 2017","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"There is this amazing conference in Las Vegas once a year called MicroConf. It's a gathering of like-minded entrepreneurs that (for the most part) are boot-strapping their business. This means that they aren't taking outside investment, specifically of the venture capital variety. It's a spectacular…","id":"f124d64b-676e-5754-ab6a-4062665be57b","fields":{"title":"Setting goals for (my version of) success.","slug":"blog/2016/04/08/setting-goals-for-my-version-of-success","date":"2016-04-08T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Setting goals for (my version of) success.","date":"April 08, 2016","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Building an Image Gallery The image gallery we will build is a simple application that displays an array of image URLs loaded from a service (Flickr), and allows the user to select them individually. It will be built with React, using Redux and redux-saga. React is being used as the core framework…","id":"493e8c7c-a6cd-5985-993f-b224a7e193d3","fields":{"title":"Build an Image Gallery Using React, Redux and redux-saga","slug":"blog/2016/03/20/build-an-image-gallery-using-redux-saga","date":"2016-03-20T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Build an Image Gallery Using React, Redux and redux-saga","date":"March 20, 2016","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"It’s been two years since I woke up dreading a workday. And I work almost every day. When we first set out to build egghead, I told my parter John that all he had to do was make amazing content, and that  I would do the rest . {% emoji flushed %} For the most part, I took that very seriously, and…","id":"123cb5d0-32dc-52ee-89c1-94ee10149488","fields":{"title":"2015 Year in Review","slug":"blog/2015/12/31/2015-year-in-review","date":"2015-12-31T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"2015 Year in Review","date":"December 31, 2015","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"2014 Year in Review It's that time of the year. People dusting off the blog and endeavoring to capture the past 12 months of their life in a wordy nutshell. It's something that I've never participated in, but I thought I'd give it a try. I quit my job. This still frightens me. In February I quit a…","id":"9a697976-9642-5e56-a7a6-59fd756ecc73","fields":{"title":"Bootstrapping egghead.io to feed my family: 2014 in Review","slug":"blog/2014/12/24/bootstrapping-egghead-dot-io-to-feed-my-family-2014-in-review","date":"2014-12-24T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Bootstrapping egghead.io to feed my family: 2014 in Review","date":"December 24, 2014","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"With best intentions we set forth to create the mighty directive. The steepest slope of the dreaded AngularJS learning curve. The \"place where the jQuery goes.\" So what is a directive? We've  talked about this before , and decided that they are  not  where the jQuery goes... usually... if you  are…","id":"3d119165-4c79-55dd-8cc5-85429ef2bd4c","fields":{"title":"Let's Make Full-Ass AngularJS Directives","slug":"blog/2014/02/11/lets-make-full-ass-angularjs-directives","date":"2014-02-11T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Let's Make Full-Ass AngularJS Directives","date":"February 11, 2014","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"How many for loops did you write today? This week? Sure. That's harmless enough. Ugly and weird, but not something to really complain about. But this is all too common: Which on the scale of bad code, isn't even  that  bad, but you start throwing some  if s in there and the insanity really starts. I…","id":"3ddd2e99-9978-5cc3-ac49-048d61a25b81","fields":{"title":"Stop writing For loops. Start using underscore.","slug":"blog/2014/02/06/stop-writing-for-loops-start-using-underscorejs","date":"2014-02-06T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Stop writing For loops. Start using underscore.","date":"February 06, 2014","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"There are few things as nerve-wracking as pushing your first subscription\nwebsite into production. Am I covering all the bases? Will everything break and\nleave me in a pit of customer support sadness? How do I even take payments? Are\nthey just going to laugh at me? Some Background My friend John…","id":"82355fc4-1862-5124-ab63-39418a65f632","fields":{"title":"How to Build a Subscription Service on Rails: A Noob's Guide","slug":"blog/2013/10/30/how-to-build-a-subscription-service-on-rails-a-noobs-guide","date":"2013-10-30T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"How to Build a Subscription Service on Rails: A Noob's Guide","date":"October 30, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Audio:\nconvert mono to stero\nadd a slight delay to one channel\nuse an EQ\nadd a touch of reverb (not too much)\nadd a little compression","id":"04728ade-ff7d-56f7-9059-8d8abc95c5aa","fields":{"title":"How to Record a High Quality Screencast","slug":"blog/2013/09/23/how-to-record-a-high-quality-screencast","date":"2013-09-23T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"How to Record a High Quality Screencast","date":"September 23, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"If you're into AngularJS at all, you are probably familiar with the kickass  AngularJS video training  from egghead.io. If you haven't seen egghead.io, it is a collection of 50+ short \"bite-sized\" training videos, largely focused on the AngularJS framework.  The videos are created by (and feature…","id":"3a853b3c-e6e3-5b1f-87e3-e5f288306c02","fields":{"title":"Why I Built an AngularJS Training Site on Rails","slug":"blog/2013/09/15/why-i-built-an-angularjs-training-site-on-rails","date":"2013-09-15T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Why I Built an AngularJS Training Site on Rails","date":"September 15, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Dependency injection is the act of supplying values or object instances (dependencies) to target objects\nfrom outside of the target object. In many (most?) cases this is automated\nby a framework, such as AngularJS. This means that a given target object does  not  create its own dependencies,\nthrough…","id":"7a408dbc-c5e8-51bc-9c2a-c3ac1af91f00","fields":{"title":"Configuring Dependency Injection in AngularJS","slug":"blog/2013/08/18/configuring-dependency-injection-in-angularjs","date":"2013-08-18T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Configuring Dependency Injection in AngularJS","date":"August 18, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"AngularJS has a reputation for a steep learning curve. It's definitely complex, but follows the 80/20 rule.  20% of the features are what you will use 80% of the time . If you are new to AngularJS and have a weekend to study, there are some very high quality resources that will let you  start Monday…","id":"5059a58c-5921-5c76-bdeb-745112675dee","fields":{"title":"Learn AngularJS this Weekend","slug":"blog/2013/08/03/learn-angularjs-in-a-weekend","date":"2013-08-03T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Learn AngularJS this Weekend","date":"August 03, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Have you ever heard (or said!) this: \"Directives? That's where the jQuery goes.\" I definitely have. In an effort to better understand\n @joshdmiller 's excellent\n ng-boilerplate , I\nwanted to understand its dependency on Boostrap. More specifically, I wanted to\nsee if I could swap out Twitter…","id":"f5ef54ec-a963-578e-b926-4ff1ab6100df","fields":{"title":"Using AngularJS? Stop using jQuery as a crutch.","slug":"blog/2013/07/27/using-angularjs-stop-using-jquery-as-a-crutch","date":"2013-07-27T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Using AngularJS? Stop using jQuery as a crutch.","date":"July 27, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"URL routing is a popular approach to matching the contents of a URL to specific\nfunctionality within a web application. URL routes programatically present\nspecific content to users based on the URL that they are visiting. It is a\npopular approach that has proven to be very effective. Something that…","id":"d8b08354-1165-5dda-8006-e759a1c70551","fields":{"title":"The basics of using ui-router with AngularJS","slug":"blog/2013/07/22/the-basics-of-using-ui-router-with-angularjs","date":"2013-07-22T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"The basics of using ui-router with AngularJS","date":"July 22, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Directives are the heart and soul of AngularJS. They are incredibly powerful.\nAngularJS sets out to extend the grammar of the browser to supply semantics that\nfacilitate the creation of web applications, going beyond the standard\nhyper-linked web page. The primary weapon to accomplish this is the…","id":"7e74f129-d4c3-51f2-86f1-8b100280395f","fields":{"title":"AngularJS Directives That Override Standard HTML Tags","slug":"blog/2013/07/15/a-look-at-angularjs-internal-directives-that-override-standard-html-tags","date":"2013-07-15T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"AngularJS Directives That Override Standard HTML Tags","date":"July 15, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"This is a series of post examining why our  Fort Worth photography\nstudio  website performs poorly in Google search\nresults, and why it fails to convert the visitors it does get into new clients.\nThe first post sought to  analyze Google Analytics\ndata \nand get a clue as to how users arrive to the…","id":"2b603bb2-d27e-57fd-9676-2071070b4fce","fields":{"title":"Why Doesn't My Photography Studio Website Appear in Search Results?","slug":"blog/2013/06/25/why-doesnt-my-photography-studio-website-appear-in-search-results","date":"2013-06-25T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Why Doesn't My Photography Studio Website Appear in Search Results?","date":"June 25, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"The internet is a competitive place for small businesses, and this is especially\ntrue when we are talking about portrait photographers. My lovely wife is a\n family photographer in Fort Worth , Texas. She's been\ndoing portrait photography professionally since 2007, and being the good nerd\nhusband I…","id":"8351847a-bd87-526c-b088-62cf34470d6b","fields":{"title":"Optimizing a Photography Studio Website for Converstion and SEO: The Analysis","slug":"blog/2013/06/22/optimizing-a-photography-studio-website-for-converstion-and-seo-the-analysis","date":"2013-06-22T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Optimizing a Photography Studio Website for Converstion and SEO: The Analysis","date":"June 22, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"What is enterprise javascript? Good question. One that might even make you chuckle 1  a little bit on the inside.\nThe word \"enterprise\" is definitely a loaded term. It could be considered by\nsome to be a buzzword. Others might say \"Why are we talking about starships?\" When I use the term \"enterprise…","id":"53a10cef-a4fe-585e-8b14-d5c47607f51a","fields":{"title":"Coming to Terms With Enterprise JavaScript","slug":"blog/2013/06/17/coming-to-terms-with-enterprise-javascript","date":"2013-06-17T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Coming to Terms With Enterprise JavaScript","date":"June 17, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"My sons love playing basketball. After a certain age\n(around 12), youth sports change. The court or field is no longer filled with\nkids that were dragged to the game by their parents. These kids are here because\nthey love playing the game. So what do you do if your kid loves the game, but\njust isn't…","id":"f2d3c97d-3cf6-5d47-aa47-dd31b526a3e0","fields":{"title":"The Paralyzing Grip of Fear","slug":"blog/2013/06/10/the-paralyzing-grip-of-fear","date":"2013-06-10T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"The Paralyzing Grip of Fear","date":"June 10, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Consulting is something that I truly love. Helping businesses succeed, helping\nemployees to stop focusing on mundane repeatable tasks, helping enterprises\ndrive large scale commerce... these are truly activities that I enjoy. Getting\ninto the mix, digging up core problems and providing solutions is…","id":"b9c1a6c9-9877-5da9-884d-ee343b704d0b","fields":{"title":"What I Learned From Brennan Dunn's Consultancy Masterclass","slug":"blog/2013/06/07/what-i-learned-from-brennan-dunns-consultancy-masterclass-w-slash-sketchnotes","date":"2013-06-07T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"What I Learned From Brennan Dunn's Consultancy Masterclass","date":"June 07, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"It is hard to explain how excited I was when Amy announced\n BaconBizConf  in April of 2013. A\nsmall conference devoted to like-minded people that either are, or want to be,\nbootstrapping product businesses. The speaker lineup included personal \"gurus\"\nthat I look up to and listen to closely like…","id":"10eb0f2a-5127-5802-bc8e-a4796934db0b","fields":{"title":"My Sketchnotes and Thoughts from BaconBizConf 2013","slug":"blog/2013/06/06/my-sketchnotes-and-thoughts-from-baconbizconf-2013","date":"2013-06-06T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"My Sketchnotes and Thoughts from BaconBizConf 2013","date":"June 06, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"After a year of working with a large AngularJS project, I thought I'd share a\nfew of the lessons that I learned in the process. Firstly, I love AngularJS. It\nsuits my needs exceedingly well, and I expect it will be my goto for the\nforseeable future when I need a solid framework for \"thick client…","id":"64f13be9-1b51-56ea-aa1d-b6cea80074af","fields":{"title":"Lessons Learned: A Year with a Large AngularJS Project","slug":"blog/2013/05/22/lessons-learned-kicking-off-an-angularjs-project","date":"2013-05-22T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Lessons Learned: A Year with a Large AngularJS Project","date":"May 22, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"The success or failure of  any  project is based on the team or teams working on\nit. Teams are like fingerprints and snowflakes. They are composed of individuals\nwith unique experiences and skillsets. When we set out to build large\napplications in a reasonable amount of time, we will generally build…","id":"38331ba3-a55e-5bf9-aa92-aa1db8f4edcc","fields":{"title":"Size and Composition of Effective Software Teams","slug":"blog/2013/05/21/size-and-composition-of-effective-teams","date":"2013-05-21T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Size and Composition of Effective Software Teams","date":"May 21, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"The Singleton is the Highlander of design patterns.  There can be only one . An example of a Singleton implementation might look something like this: from Tom Roggero The above JavaScript is from an  answer \nfrom StackOverflow that seemed resonable. I've never actually needed an enforced Singleton…","id":"90f36e1d-df8c-5c05-8e75-02c2aa5e9541","fields":{"title":"AngularJS, Dependency Injection, and when is a singleton not a Singleton?","slug":"blog/2013/05/01/when-is-a-singleton-not-a-singleton","date":"2013-05-01T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"AngularJS, Dependency Injection, and when is a singleton not a Singleton?","date":"May 01, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"I posted  an\narticle  about using models to assist in creating leaner, meaner controllers. It resulted in a lively conversation in the comments that spawned an interesting  rebuttal  from  Rob Conery  that essentially says I am full of it, and the names I attach to the patterns I use are wrong. This…","id":"b0046216-c8ca-59d6-bb34-48c977c066f6","fields":{"title":"A rose by any other name?","slug":"blog/2013/04/26/a-rose-by-any-other-name","date":"2013-04-26T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"A rose by any other name?","date":"April 26, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Respect your data. Contain your state. \nData and state are the foundation of your application. These two items should be\nabsolutely respected. As you work through the AngularJS documentation, these two\nitems are generally stored on the controllers. This works OK, but as your app\ngrows beyond the…","id":"850ec444-559d-5cf0-a126-a75a6f5ff63c","fields":{"title":"Modeling Data and State in Your AngularJS Application","slug":"blog/2013/04/24/modeling-data-and-state-in-your-angularjs-application","date":"2013-04-24T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Modeling Data and State in Your AngularJS Application","date":"April 24, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"There are  a lot  of VIM plugins to choose from. An individual's list of what\nwould be considered \"essential\" is largely a personal matter. For any given\nplugin, there is also probably going to be an excellent alternative plugin that does the\nsame basic thing in a slightly different way. I'm just…","id":"e9af66f4-e970-5964-aec5-8aa0c8d2456e","fields":{"title":"5 Essential VIM Plugins That Greatly Increase my Productivity","slug":"blog/2013/04/23/5-essential-vim-plugins","date":"2013-04-23T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"5 Essential VIM Plugins That Greatly Increase my Productivity","date":"April 23, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"For as long as I can remember, all of my computer upgrades have been \"bigger and\nbadder.\" Outside of moving from a FULL ATX DESKTOP WORKSTATION to a laptop,\nMoore's law has played out nicely. Every few years I'd get something bigger and\nbetter. Not this time. After several years of lugging around a…","id":"69eea334-e327-5f68-852e-d58c4f2f4c84","fields":{"title":"It is Tiny. One Week Developing With an 11\" MacBook Air","slug":"blog/2013/04/18/a-tiny-review-one-week-with-an-11-macbook-air-for-software-development","date":"2013-04-18T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"It is Tiny. One Week Developing With an 11\" MacBook Air","date":"April 18, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"It's like coming full circle. When I was first introduced to computers, they very much resembled what I see in\nTerminal today. I've always had a distinct fondness for the command line\ninterface. That said, when I started using computers professionally most of my\ntime has been spent in fancy GUIs…","id":"9252a7af-96fd-5b52-806d-005870fc1911","fields":{"title":"Getting to Know VIM","slug":"blog/2013/04/09/getting-to-know-vim","date":"2013-04-09T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Getting to Know VIM","date":"April 09, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Vim Adventures  is a fun browser based game that\nteaches basic VIM skills while adventuring. It is kind of silly, and can be a\nbit... frustrating... but that is the point. This is VIM after all! No pain, no\ngain ;)","id":"bd42a971-34e0-57d6-a11e-2d590093a742","fields":{"title":"VIM Adventures: A Fun Way to Pick up Some Basic Skills","slug":"blog/2013/04/09/vim-adventures-a-fun-way-to-pick-up-some-basic-skills","date":"2013-04-09T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"VIM Adventures: A Fun Way to Pick up Some Basic Skills","date":"April 09, 2013","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"Image from purplemattfish I'm a stickler for the \"single assertion per test\" guideline. One of the pillars of good unit tests is readability. Multiple asserts undermine this principle and make tests that are more difficult to read, understand, and maintain. A clean solution to this problem is to use…","id":"18235215-6af2-59bd-9937-823f7d7ca5a0","fields":{"title":"Using Custom Jasmine Matchers to Make Unit Tests More Readable","slug":"blog/2012/11/17/using-custom-jasmine-matchers-to-make-unit-tests-more-readable","date":"2012-11-17T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Using Custom Jasmine Matchers to Make Unit Tests More Readable","date":"November 17, 2012","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"I've been reading the Rough Cut of  Practical Object Oriented Design , and I have been absolutely enjoying every page. It isn't very often that a technical book comes along that really strikes me as a \"new classic,\" but this one qualifies.  Sandi Metz  has compiled a concise review of  SOLID design…","id":"b28faa8b-8771-5e26-8e21-ad40debf0dce","fields":{"title":"Practical Object Oriented Design is Excellent","slug":"blog/2012/08/28/practical-object-oriented-design-in-ruby-is-a-really-good-book","date":"2012-08-28T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Practical Object Oriented Design is Excellent","date":"August 28, 2012","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"I'm currently working on a large enterprise JS application, and enjoying myself quite a bit. We've implemented standards and practices that remove most of the bad parts of JS dev. We are using straight up JS with  AngularJS . We are covering our important logic with solid unit tests. We are…","id":"151e5788-bf05-5309-98cb-944be474593a","fields":{"title":"On Transitioning to JavaScript From AS3/Flex","slug":"blog/2012/08/27/on-transitioning-to-javascript-from-as3-slash-flex","date":"2012-08-27T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"On Transitioning to JavaScript From AS3/Flex","date":"August 27, 2012","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"I'm a huge fan of peer review, especially with Atlassian's  Crucible  tool. It can be hard to introduce code review to a group that isn't used to doing it, or has had bad experiences with \"hostile\" review process in the past. It can be a very effective way to share knowledge and increase quality of…","id":"d746c754-50e0-5e15-b7e8-e7bb34b5ac21","fields":{"title":"Code Review: How to Make Friends and Influence Developers","slug":"blog/2012/08/01/code-review-how-to-make-friends-and-influence-developers","date":"2012-08-01T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Code Review: How to Make Friends and Influence Developers","date":"August 01, 2012","banner":null,"slug":null,"keywords":null}}},{"node":{"excerpt":"I've been wanting to part ways with WordPress for some time. It's been expensive, running a VPS for the hosting. I've been \"attacked\" on multiple occasions that result in blacklisting from the Google when I ran on much less expensive shared hosting. It is probably theme dependent also, as well as…","id":"ff8349c6-9d6e-53f3-85bd-adb987616120","fields":{"title":"Fresh Start: Migrating from Wordpress to Octopress","slug":"blog/2012/07/25/fresh-start-migrating-wordpress-octopress","date":"2012-07-25T00:00:00.000Z"},"parent":{"sourceInstanceName":"legacy"},"frontmatter":{"title":"Fresh Start: Migrating from Wordpress to Octopress","date":"July 25, 2012","banner":null,"slug":null,"keywords":["test"]}}},{"node":{"excerpt":"Currently focused on applying core instructional design principles to egghead.io with more interaction with instructors, live events, and content development before releasing the final product.","id":"9badc994-619d-5198-9a86-7bbe6e8858f1","fields":{"title":"What I'm Doing Now","slug":"now","date":"2011-11-20T00:00:00.000Z"},"parent":{"sourceInstanceName":"blog"},"frontmatter":{"title":"What I'm Doing Now","date":"November 20, 2011","banner":null,"slug":"now","keywords":null}}}]}},"pageContext":{"articles":["ca8a3e7b-1d38-5ad5-9b65-93481f38b291","fe1e16e7-dd8d-52bb-9d72-3b5cbd054352","11a06fb9-c10b-5cef-b8ad-46c643437215","89685b70-d369-5763-baec-c1d8f9b5f248","ca686418-fb04-523c-92f9-e173aa570b47","4a1a3f0e-b58c-57e3-bf2e-2afdfe4f86d4","7097dcd4-1831-5786-8f39-f070ba832f42","0fc02c22-ae07-58ca-81fb-16bbba574811","b77ac617-766f-53f5-b7fa-b70a8fad9720","02611702-40fa-5b7d-a03e-774f4d2c3f19","c40958ff-ffc8-568d-916b-02b2214fdde1","58e37861-9594-58a9-a764-405a25e1d9f5","1032c167-8f05-546b-8d1f-a171d3da3e5d","75bf5731-3a1a-5230-af74-30d58d2b1f0c","672369cd-ec56-5597-a41d-0aeab0b6c9f2","43ccf2a1-db98-54ee-b4c5-4d8f21c78a65","02b734cc-7d79-5160-ba39-df381e3ca405","19a4d32d-6186-5d4c-be9b-8a01c0628862","50531520-9124-5dc6-981a-e08601b132bb","a807cde7-9199-51be-9445-10fdc498147f","83d03164-5a45-5c98-aa4b-64ad7bd4e6ae","957b3eab-cfa4-5c54-bf63-2581b6dedf14","2a32d660-791f-5332-a5e7-fbe5fc16bbe1","df08f616-1dda-5669-be0b-fe8f11f0dbb3","94c38ad9-7713-5b66-ad13-2b4faf2425aa","30e98418-a53c-502a-873d-889b82fcff0d","82e40cb1-5e89-5801-8713-5836cd005578","1bb753c6-993b-5c09-9861-eebf0f8bb59b","a9c22daa-6686-5f19-8faa-c9d1d550e227","fc0d9597-3606-5e7f-a2d5-672ebe407805","ce1e56dc-1b6b-5fe6-aea4-a7296c18050a","a4f4f718-015f-5d17-ad00-e084adce153e","ae70c648-e65c-5716-88df-a2ce2020c140","37e7ec27-1c51-5ec9-a64e-a74939e4e25b","2aa5a9ce-23e9-55d8-bda9-851756624a12","dd58c572-1672-5cf7-aaad-b9ff8dbb3164","332b5c9c-0fe6-5803-8718-0951e8cb31b5","e506b389-eb2c-5fed-b48e-40436fad6fe4","de273d81-e411-5c93-8289-990bcd8f05a0","d434ec0f-cc4b-5c75-93a5-ee075ba9c4e3","217de569-84a7-5acc-9356-2b96a89b5f5d","b00ce30b-aff1-5402-8ca1-e81c1bce7d42","843881ea-b774-5956-9a0b-0f60cae946fc","20788b69-9e4a-52cd-9d53-17eaf79c3d04","60b1577d-a942-5159-b682-1bcf919be6b9","90806cac-3418-529c-a07e-207d74015d5c","231eb86e-adf2-5725-864f-1300f73a7b1d","8d41a368-5ca7-52e7-8f72-7d8472d847f1","4d17d7cb-f79b-5e23-afe3-aac362e42c48","306b9724-4249-5ecf-967a-e4f8d07cfc77","15b6ae9b-6951-5182-b140-aa8bd37212b5","a3a2bba9-930d-5516-aac7-94e6e2122c1f","0c804cee-609d-5044-8c51-c70f1c988b45","84c8fb7f-66af-5930-bf76-2537dbd63d6e","bbdf5661-9563-5d99-abab-f7a4770b6605","d7ca8d77-7e00-5fb5-8c39-6589288f1198","052c4d36-17d0-5147-92f5-daa90d0a32f5","4a83ba90-59f9-524f-9d85-91cea0c44a50","a79327ce-96eb-5e4a-ae76-3ac4ae6f634d","5f292c76-a330-5177-9b49-27562521466a","ae3f2702-0e9a-5a55-9c74-6eb9f1cdaf74","62e46642-9404-5ac2-8ae3-46025d71c6d0","b8390375-7ce7-506d-bddd-df378f43b5d2","97675014-4674-54d3-99ab-e25ad89aca66","5760eb9f-bc09-5a82-a3a6-89811a7a9550","ded93f33-0998-544a-95fe-a7accb36a5a3","366e2daa-5a2d-552f-9fdc-6e05a9928b23","fb274808-f7f6-5e7e-bbe8-281af149eb95","793ce401-0f98-5178-983c-2146606d5edd","bc5cd0af-76ec-5594-8137-904743e7d2f4","964e005a-7fb3-5eff-8054-764ceb65a798","9dc6c231-86af-5e8d-a112-5ee12b7c09e8","a189980a-c6f7-5cd2-865c-b4d434e81fef","1c0f1901-1400-56fa-9a9d-780453c22332","775968fc-1921-56ec-94e1-21f34468b1c9","d4ef8087-abef-5f65-818e-e8c21505a41a","423a41b5-7d73-51bb-8040-40e9cf94ef60","674a3869-52d8-509f-9fbf-9111b665ca58","b45e0e76-70dc-5eda-97a1-b861f1ff3427","cbaa7c1e-eda5-5b9f-9543-40ea4e726e27","e3cc36bb-dc75-506c-901b-7a322ab22d57","2e842e11-3a1d-5c65-b6d1-e1475f910e98","71a00fe8-9a13-5efb-8e8c-16c0a08fe604","37e3a85f-3b1c-5dc3-84d5-ee4fc8cf9405","5dd41835-fe85-53a9-a724-567ea2b738fb","3a3c1e47-cdcd-5f38-85b3-c7af2e313167","f124d64b-676e-5754-ab6a-4062665be57b","493e8c7c-a6cd-5985-993f-b224a7e193d3","123cb5d0-32dc-52ee-89c1-94ee10149488","9a697976-9642-5e56-a7a6-59fd756ecc73","3d119165-4c79-55dd-8cc5-85429ef2bd4c","3ddd2e99-9978-5cc3-ac49-048d61a25b81","82355fc4-1862-5124-ab63-39418a65f632","04728ade-ff7d-56f7-9059-8d8abc95c5aa","3a853b3c-e6e3-5b1f-87e3-e5f288306c02","7a408dbc-c5e8-51bc-9c2a-c3ac1af91f00","5059a58c-5921-5c76-bdeb-745112675dee","f5ef54ec-a963-578e-b926-4ff1ab6100df","d8b08354-1165-5dda-8006-e759a1c70551","7e74f129-d4c3-51f2-86f1-8b100280395f","2b603bb2-d27e-57fd-9676-2071070b4fce","8351847a-bd87-526c-b088-62cf34470d6b","53a10cef-a4fe-585e-8b14-d5c47607f51a","f2d3c97d-3cf6-5d47-aa47-dd31b526a3e0","b9c1a6c9-9877-5da9-884d-ee343b704d0b","10eb0f2a-5127-5802-bc8e-a4796934db0b","64f13be9-1b51-56ea-aa1d-b6cea80074af","38331ba3-a55e-5bf9-aa92-aa1db8f4edcc","90f36e1d-df8c-5c05-8e75-02c2aa5e9541","b0046216-c8ca-59d6-bb34-48c977c066f6","850ec444-559d-5cf0-a126-a75a6f5ff63c","e9af66f4-e970-5964-aec5-8aa0c8d2456e","69eea334-e327-5f68-852e-d58c4f2f4c84","9252a7af-96fd-5b52-806d-005870fc1911","bd42a971-34e0-57d6-a11e-2d590093a742","18235215-6af2-59bd-9937-823f7d7ca5a0","b28faa8b-8771-5e26-8e21-ad40debf0dce","151e5788-bf05-5309-98cb-944be474593a","d746c754-50e0-5e15-b7e8-e7bb34b5ac21","ff8349c6-9d6e-53f3-85bd-adb987616120","9badc994-619d-5198-9a86-7bbe6e8858f1"],"categories":[]}},
    "staticQueryHashes": ["1045846374"]}