<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jerod Santo</title>
    <description>The latest articles on DEV Community by Jerod Santo (@jerodsanto).</description>
    <link>https://dev.to/jerodsanto</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F25528%2F2a9753c8-19ac-443e-9978-7d9922e35a49.jpeg</url>
      <title>DEV Community: Jerod Santo</title>
      <link>https://dev.to/jerodsanto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jerodsanto"/>
    <language>en</language>
    <item>
      <title>What do you consider your greatest developer strength? Weakness?</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Fri, 28 Jun 2019 16:48:29 +0000</pubDate>
      <link>https://dev.to/jerodsanto/what-do-you-consider-your-greatest-developer-strength-weakness-4bcj</link>
      <guid>https://dev.to/jerodsanto/what-do-you-consider-your-greatest-developer-strength-weakness-4bcj</guid>
      <description>&lt;p&gt;On &lt;a href="https://changelog.com/jsparty/78"&gt;JS Party #78&lt;/a&gt; we talked all about developer strengths and weaknesses (and even shared our own). That got me thinking... we all have strengths and weaknesses. Sometimes we have them in common, sometimes they're totally unique because of our background/experience. Let's share 'em! I'll go first: &lt;/p&gt;

&lt;h3&gt;
  
  
  Strength 💪
&lt;/h3&gt;

&lt;p&gt;One of my greatest strengths as a developer (which I learned is shared by some of my JS Party co-panelists) is STUBBORNNESS! I will continue to bang my head against a wall until there's a hole large enough for me to slip a solution through.&lt;/p&gt;

&lt;h3&gt;
  
  
  Weakness 😭
&lt;/h3&gt;

&lt;p&gt;One of my greatest weaknesses as a developer is I am not good at thinking &lt;em&gt;in libraries&lt;/em&gt;, so I often fail to generalize my code for reuse. Or, if I do generalize it for reuse, I don't package it up and release it for others. &lt;/p&gt;

&lt;h3&gt;
  
  
  Your turn 🤝
&lt;/h3&gt;

&lt;p&gt;What do you consider your greatest developer strength? Weakness?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>There's only one way to validate an email address</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Tue, 18 Jun 2019 15:16:46 +0000</pubDate>
      <link>https://dev.to/jerodsanto/there-s-only-one-way-to-validate-an-email-address-4i3k</link>
      <guid>https://dev.to/jerodsanto/there-s-only-one-way-to-validate-an-email-address-4i3k</guid>
      <description>&lt;p&gt;The only thing that you can reliably do to validate an email address is to send it an email. YOU SEND IT AN EMAIL! That's the only way you can do it. I know what you're thinking, &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have the best regular expression for this!" &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-845821937452486657-237" src="https://platform.twitter.com/embed/Tweet.html?id=845821937452486657"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-845821937452486657-237');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=845821937452486657&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;No, you do not. You think you do, but you don't. Your regular expression is invalid; it's not good enough. You know the old adage:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A developer, when faced with a problem, thought 'I know. I'll use regular expressions.' Now he has two problems." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's what you have - you have two problems. I've known this for years, and yet I was still convinced recently to add a regular expression-based email validation server-side; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;(First of all, never trust a client, right? You can do it all you want there, but it can bypass all your checks. It's gotta be server-side.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-834831478919987205-757" src="https://platform.twitter.com/embed/Tweet.html?id=834831478919987205"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-834831478919987205-757');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=834831478919987205&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I put a regular expression-based email validation and I thought "This one's pretty good." &lt;/p&gt;

&lt;p&gt;In fact -- man, I don't know what came over me; I was actually even talked into copy-pasting one off of a gist! 😭&lt;/p&gt;

&lt;p&gt;It looked pretty good, and it covered most of the bases, and sure enough, last week I got an email from a prospective user saying &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Hey, I'm trying to sign up for &lt;a href="https://changelog.com/weekly" rel="noopener noreferrer"&gt;Changelog Weekly&lt;/a&gt;, but it says my email address isn't valid, and it obviously is valid, because I'm emailing you with it right now..."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And I thought, "I'm an idiot. &lt;strong&gt;Why&lt;/strong&gt; did I put a regular expression-based email validation on my system?" &lt;/p&gt;

&lt;p&gt;So don't do that. I know you can find one on Stack Overflow...  I'll tell you right now, it's not good enough. Email addresses are SO complicated. There's so many valid things... &lt;/p&gt;

&lt;p&gt;If you're going to do it -- and I'll admit that I &lt;a href="https://github.com/thechangelog/changelog.com/blob/master/lib/changelog/regexp.ex#L2" rel="noopener noreferrer"&gt;kept it in there&lt;/a&gt;, but I just check that there's some stuff, and then an &lt;code&gt;@&lt;/code&gt;, and then some stuff.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="sr"&gt;~r/^\S+@\S+\.\S+$/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's pretty much what you're gonna be able to do... And that's just to basically make sure that you don't get some junk into your database... 🙅‍♀️&lt;/p&gt;

&lt;p&gt;But still, all you've gotta do is send them an email, and if they click on it, well that's a valid email address. If they don't click on it, then who cares...? That's a hard-learned lesson! &lt;/p&gt;

&lt;p&gt;If you want to validate an email address, send it an email. Problem solved.&lt;/p&gt;

&lt;p&gt;Until bots start clicking on emails. Then we're gonna have a whole new issue... But so far I don't think there are bots that will &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;create a fake email address&lt;/li&gt;
&lt;li&gt;sign up for your thing, and then&lt;/li&gt;
&lt;li&gt;access that email address and click on the link&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When we get there, then we'll have to come up with something else. But until then, just send it an email.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;What you've just read is an excerpt from &lt;a href="https://changelog.com/jsparty/39" rel="noopener noreferrer"&gt;JS Party #39&lt;/a&gt;. I fixed up the formatting a bit for readability, but these (almost) exact words were spoken by me during &lt;a href="https://changelog.com/jsparty/39#transcript-98" rel="noopener noreferrer"&gt;the Pro Tips segment&lt;/a&gt; of that episode. In addition to tips like this one, we also &lt;a href="https://changelog.com/jsparty/77" rel="noopener noreferrer"&gt;discuss news &amp;amp; trends&lt;/a&gt;, interview &lt;a href="https://changelog.com/jsparty/71" rel="noopener noreferrer"&gt;awesome guests&lt;/a&gt;, teach each other things &lt;a href="https://changelog.com/jsparty/76" rel="noopener noreferrer"&gt;like we're 5&lt;/a&gt;, and have lots of fun doing it. You should totally come party with us &lt;a href="https://changelog.com/live" rel="noopener noreferrer"&gt;live&lt;/a&gt; on Thursdays or &lt;a href="https://changelog.com/jsparty" rel="noopener noreferrer"&gt;subscribe&lt;/a&gt; to the produced version! Take a listen and let us know what you think.&lt;/em&gt; 💚&lt;/p&gt;


&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/jsparty/39-experimenting-with-some-new-ideas-"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;39: Experimenting with some new ideas 🔬&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/jsparty"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        JS Party
      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-39-experimenting-with-some-new-ideas-" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-39-experimenting-with-some-new-ideas-" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-39-experimenting-with-some-new-ideas-" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-39-experimenting-with-some-new-ideas-" alt="JS Party" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F46%2Fce547895-87b7-4443-a752-3ea70febb311.svg"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-39-experimenting-with-some-new-ideas-"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/jsparty/39-experimenting-with-some-new-ideas-"&gt;
      &lt;img id="episode-profile-image" alt="39: Experimenting with some new ideas 🔬" width="420" height="420" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F46%2Fce547895-87b7-4443-a752-3ea70febb311.svg"&gt;
      &lt;img id="animated-bars" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fanimated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fvolume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fvolume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;


</description>
      <category>webdev</category>
      <category>devtips</category>
      <category>regex</category>
      <category>podcast</category>
    </item>
    <item>
      <title>Is JavaScript the "CO2" of the web?</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Mon, 17 Jun 2019 14:21:04 +0000</pubDate>
      <link>https://dev.to/jerodsanto/is-javascript-the-co2-of-the-web-5615</link>
      <guid>https://dev.to/jerodsanto/is-javascript-the-co2-of-the-web-5615</guid>
      <description>&lt;p&gt;&lt;a href="https://twitter.com/ChrisFerdinandi"&gt;"The vanilla JavaScript guy"&lt;/a&gt; joined &lt;a href="https://changelog.com/jsparty"&gt;JS Party&lt;/a&gt; last week and a fun metaphor was discussed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is web development stuck in the Hummer days? If so, is vanilla JS a bicycle? A Lime scooter? How far can this metaphor stretch?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You will 💯 want to listen to this and let us know your thoughts on the matter. The CO2 metaphor starts around the 20-minute mark (&lt;a href="https://changelog.com/jsparty/80#t=20:00"&gt;jump there&lt;/a&gt;) 💚💚💚&lt;/p&gt;


&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/jsparty/javascript-is-the-co2-of-the-web"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;JavaScript is the CO2 of the web&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/jsparty"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        JS Party  

      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-javascript-is-the-co2-of-the-web" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-javascript-is-the-co2-of-the-web" src="/assets/playbutt.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-javascript-is-the-co2-of-the-web" src="/assets/pausebutt.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-javascript-is-the-co2-of-the-web" alt="JS Party" src="https://res.cloudinary.com/practicaldev/image/fetch/s--OKzBBRKS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--9X5wejAR--/c_fill%2Cf_auto%2Cfl_progressive%2Cq_auto/https://dev-to-uploads.s3.amazonaws.com/uploads/podcast/image/46/ce547895-87b7-4443-a752-3ea70febb311.svg"&gt;
  &lt;/div&gt;
  &lt;div class="hidden-audio" id="hidden-audio-javascript-is-the-co2-of-the-web"&gt;
    
      
      Your browser does not support the audio element.
    
    &lt;div id="progressBar" class="audio-player-display"&gt;
      &lt;a href="/jsparty/javascript-is-the-co2-of-the-web"&gt;
        &lt;img width="420" height="420" id="episode-profile-image" alt="JavaScript is the CO2 of the web" src="https://res.cloudinary.com/practicaldev/image/fetch/s--JwUSgiAO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--G9Yn3fky--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_420%2Cq_auto%2Cw_420/https://dev-to-uploads.s3.amazonaws.com/uploads/podcast/image/46/ce547895-87b7-4443-a752-3ea70febb311.svg"&gt;
        &lt;img id="animated-bars" src="/assets/animated-bars.gif" alt="animated volume bars"&gt;
      &lt;/a&gt;
      &lt;span id="barPlayPause"&gt;
        &lt;img class="butt play-butt" src="/assets/playbutt.png" alt="play"&gt;
        &lt;img class="butt pause-butt" src="/assets/pausebutt.png" alt="pause"&gt;
      &lt;/span&gt;
      &lt;span id="volume"&gt;
        &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
          &lt;span id="volbutt"&gt;
            &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://res.cloudinary.com/practicaldev/image/fetch/s--SnhE4kcy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/volume.png"&gt;
          &lt;/span&gt;
          &lt;span class="range-wrapper"&gt;
            
          &lt;/span&gt;
        &lt;/span&gt;
        &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
          &lt;img alt="mute" class="icon-img" height="16" width="16" src="https://res.cloudinary.com/practicaldev/image/fetch/s--prPRZNLS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/volume-mute.png"&gt;
        &lt;/span&gt;
        &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
      &lt;/span&gt;
      &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
        &lt;span id="buffer"&gt;&lt;/span&gt;
        &lt;span id="progress"&gt;&lt;/span&gt;
        &lt;span id="time"&gt;initializing...&lt;/span&gt;
        &lt;span id="closebutt"&gt;×&lt;/span&gt;
      &lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>webperf</category>
      <category>podcast</category>
    </item>
    <item>
      <title>8 great reads for aspiring JavaScript devs 📚</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Thu, 09 May 2019 13:57:43 +0000</pubDate>
      <link>https://dev.to/jerodsanto/8-great-reads-for-aspiring-javascript-devs-3bpa</link>
      <guid>https://dev.to/jerodsanto/8-great-reads-for-aspiring-javascript-devs-3bpa</guid>
      <description>&lt;p&gt;&lt;a href="https://twitter.com/shortdiv" rel="noopener noreferrer"&gt;Divya&lt;/a&gt;, &lt;a href="https://twitter.com/EmmaWedekind" rel="noopener noreferrer"&gt;Emma&lt;/a&gt;, and I had a gab session on &lt;strong&gt;BOOKS&lt;/strong&gt; during the final segment of &lt;a href="https://changelog.com/jsparty/73" rel="noopener noreferrer"&gt;JS Party #73&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The list of recommended reads from that convo was too good to only exist buried in the &lt;a href=""&gt;episode's show notes&lt;/a&gt;, so here they are: some must-read books for aspiring JS devs!&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;a href="https://refactoringui.com/book" rel="noopener noreferrer"&gt;Refactoring UI&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Learn how to design beautiful user interfaces by yourself using specific tactics explained from a developer's point-of-view.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Emma recommends. Divya adds her &lt;code&gt;+1&lt;/code&gt;, saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's excellent. For people who don't consider themselves designer, but want to learn more. It's sooo good.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  2. &lt;a href="https://pragprog.com/book/tpp/the-pragmatic-programmer" rel="noopener noreferrer"&gt;The Pragmatic Programmer&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;An absolute classic by Andy Hunt and Dave Thomas. The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Straight from the programming trenches, The Pragmatic Programmer: From Journeyman to Master cuts through the increasing specialization and technicalities of modern software development to examine the core process—what do you do, as an individual and as a team, if you want to create software that’s easy to work with and good for your users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What Jerod says about it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A spectacular book that every developer would do well to read.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="https://en.wikipedia.org/wiki/The_Mythical_Man-Month" rel="noopener noreferrer"&gt;The Mythical Man-Month&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A book on software engineering and project management by Fred Brooks first published in 1975...  Its central theme is that "adding manpower to a late software project makes it later". This idea is known as Brooks' law, and is presented along with the second-system effect and advocacy of prototyping.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jerod says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It can be summarized in a single sentence. "9 pregnant women can't have a baby in 1 month." Take that sentence and apply it to software development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4. &lt;a href="https://github.com/getify/You-Dont-Know-JS" rel="noopener noreferrer"&gt;You Don't Know JS&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A book series exploring the parts of JavaScript that we all think we understand but don't REALLY know.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Emma says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://twitter.com/getify" rel="noopener noreferrer"&gt;Kyle Simpson&lt;/a&gt; is one of the most prolific teachers I've found.. all of his books are free, which is incredible... it wasn't until he explained closures that I understood it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  5. &lt;a href="https://www.amazon.com/Professional-JavaScript-Developers-Nicholas-Zakas/dp/1118026691" rel="noopener noreferrer"&gt;Professional JavaScript for Web Developers&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This book provides a developer-level introduction along with more advanced and useful features of JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Emma says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is quite a BIG book. I pieced through it, and enjoyed it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  6. &lt;a href="http://javascriptbook.com" rel="noopener noreferrer"&gt;Learn JavaScript &amp;amp; jQuery&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We understand that all kinds of people build websites these days (and that they don’t all have a degree in computer science). So, if you want to use JavaScript to make your web pages more interactive, interesting, and usable, we can help. Even if you have never done any programming.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Emma says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This one is more for beginners... I only read the JavaScript portion. They use these beautiful graphics to explain concepts like scope and event delegation. It's &lt;em&gt;extremely&lt;/em&gt; beginner friendly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  7. &lt;a href="https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670" rel="noopener noreferrer"&gt;Code Complete&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A software development book, written by Steve McConnell and published in 1993 encouraging developers to continue past code-and-fix programming and the big design up front and waterfall models. It is also a compendium of software construction techniques, which include techniques from naming variables to deciding when to write a subroutine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Divya says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One of the books that I always come back to when I think about the overarching philosophy of decisions I make. It's a long read, but is available online for free.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  8. &lt;a href="https://addyosmani.com/resources/essentialjsdesignpatterns/book/" rel="noopener noreferrer"&gt;Learning JavaScript Design Patterns&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The pitch:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Design patterns are reusable solutions to commonly occurring problems in software design. They are both exciting and a fascinating topic to explore in any programming language... In this book we will explore applying both classical and modern design patterns to the JavaScript programming language.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Emma says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Highly recommend if you want to learn more about designing code in effective ways.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Divya adds:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That was my goto Bible, so to speak, when I wasn't using frameworks. I was just doing things vanilla style... that book helped me understand what a singleton is.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;There's your rundown. ✊ &lt;/p&gt;

&lt;p&gt;Interested in the &lt;em&gt;people&lt;/em&gt; behind these recommendations? Want to know how to talk about books that you haven't read? Curious how Jerod made it through half a dozen books in two-weeks time? Listen to the entire episode right here 👇&lt;/p&gt;


&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/jsparty/fresh-voices"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;Fresh voices!&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/jsparty"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        JS Party
      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-fresh-voices" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-fresh-voices" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-fresh-voices" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-fresh-voices" alt="JS Party" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F46%2Fce547895-87b7-4443-a752-3ea70febb311.svg"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-fresh-voices"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/jsparty/fresh-voices"&gt;
      &lt;img id="episode-profile-image" alt="Fresh voices!" width="420" height="420" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F46%2Fce547895-87b7-4443-a752-3ea70febb311.svg"&gt;
      &lt;img id="animated-bars" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fanimated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fvolume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fvolume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Of course, if you dig this show you'll &lt;em&gt;probably&lt;/em&gt; like all of our podcasts. Check out our &lt;a href="https://changelog.com/master" rel="noopener noreferrer"&gt;Master feed&lt;/a&gt; where you can get every episode we publish (including exclusive master-only content). 💚&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>career</category>
      <category>books</category>
    </item>
    <item>
      <title>Stop limiting your open source library’s potential</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Thu, 04 Apr 2019 13:45:24 +0000</pubDate>
      <link>https://dev.to/jerodsanto/stop-limiting-your-open-source-library-s-potential-9bn</link>
      <guid>https://dev.to/jerodsanto/stop-limiting-your-open-source-library-s-potential-9bn</guid>
      <description>&lt;p&gt;This morning I stumbled across &lt;a href="https://github.com/zhihu/griffith" rel="noopener noreferrer"&gt;Griffith&lt;/a&gt; – a &lt;em&gt;React-based&lt;/em&gt; web video player. That's cool and all, but you know what'd be even cooler? A web video player that we all can use.&lt;/p&gt;




&lt;p&gt;There's a recurring theme in open source where &lt;code&gt;TECHNOLOGY_X&lt;/code&gt; gets popular and then a bunch of libraries and tools get created specifically for (or ported to) &lt;code&gt;TECHNOLOGY_X&lt;/code&gt;, but they can't be used with &lt;code&gt;TECHNOLOGY_Y&lt;/code&gt; or &lt;code&gt;TECHNOLOGY_Z&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is especially common in front-end-javascript-land where there are so many frameworks that come and go over the years. Examples!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You want a search box but you find an &lt;a href="https://github.com/dnauck/angular-advanced-searchbox" rel="noopener noreferrer"&gt;Angular search box&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;You want a geocoding library but you find a &lt;a href="https://ubilabs.github.io/geocomplete/" rel="noopener noreferrer"&gt;jQuery geocoding library&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;You want a datepicker but you find an &lt;a href="https://github.com/wesm87/ember-datepicker" rel="noopener noreferrer"&gt;Ember datepicker&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It doesn't have to be that way!&lt;/p&gt;

&lt;p&gt;With a little forethought you can build a generically-useful library and then provide small wrapper libraries that &lt;em&gt;adapt&lt;/em&gt; the generic library to specific framework use cases. This is called &lt;a href="https://en.wikipedia.org/wiki/Adapter_pattern" rel="noopener noreferrer"&gt;the adapter pattern&lt;/a&gt; and I swear it's not as bad as we make it out to be in this tweet.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1110224694093987842-463" src="https://platform.twitter.com/embed/Tweet.html?id=1110224694093987842"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1110224694093987842-463');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1110224694093987842&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/nzgb" rel="noopener noreferrer"&gt;Nicolás Bevacqua&lt;/a&gt; has been applying this principle to much success for years. He's a great example to follow if you need some help figuring out the details!&lt;/p&gt;

&lt;p&gt;Case in point: he created &lt;a href="https://github.com/bevacqua/dragula" rel="noopener noreferrer"&gt;Dragula&lt;/a&gt; – a generic drag-n-drop library you can use directly with vanilla JS. He then followed it up with adapters (which he calls &lt;em&gt;bridges&lt;/em&gt; – same difference):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The official &lt;a href="https://github.com/bevacqua/angularjs-dragula" rel="noopener noreferrer"&gt;Angular bridge&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The official &lt;a href="https://github.com/valor-software/ng2-dragula" rel="noopener noreferrer"&gt;Angular 2 bridge&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The official &lt;a href="https://github.com/bevacqua/react-dragula" rel="noopener noreferrer"&gt;React bridge&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What's even cooler about this approach is that Nicolás has paved the way for others to come along and build &lt;a href="https://github.com/bevacqua/react-dragula" rel="noopener noreferrer"&gt;an Ember adapter&lt;/a&gt; for Dragula, an &lt;a href="https://github.com/michaelmalonenz/aurelia-dragula" rel="noopener noreferrer"&gt;Aurelia adapter&lt;/a&gt; for Dragula, etc.&lt;/p&gt;

&lt;p&gt;And when &lt;code&gt;TECHNOLOGY_X++&lt;/code&gt; comes along next year? You can guess what it'd take to build it an adapter for Dragula....&lt;/p&gt;




&lt;p&gt;When you hard-attach your library to a specific technology or framework, you limit its potential impact. By thinking ahead and putting in &lt;em&gt;a little&lt;/em&gt; more effort, your library could benefit orders of magnitudes more people. Maybe even &lt;em&gt;future-you&lt;/em&gt;, once you've moved on to &lt;code&gt;TECHNOLOGY_X++&lt;/code&gt;...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: &lt;em&gt;read the original article &lt;a href="https://changelog.com/posts/stop-limiting-your-open-source-librarys-potential" rel="noopener noreferrer"&gt;on changelog.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>career</category>
    </item>
    <item>
      <title>Chris Coyier on The Great Divide</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Thu, 28 Mar 2019 15:13:20 +0000</pubDate>
      <link>https://dev.to/jerodsanto/chris-coyier-on-the-great-divide-af8</link>
      <guid>https://dev.to/jerodsanto/chris-coyier-on-the-great-divide-af8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Two front-end developers are sitting at a bar. They have nothing to talk about.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://twitter.com/chriscoyier" rel="noopener noreferrer"&gt;Chris Coyier&lt;/a&gt; joins &lt;a href="https://twitter.com/noopkat" rel="noopener noreferrer"&gt;Suz Hinton&lt;/a&gt; and myself to continue the discussion on &lt;a href="https://css-tricks.com/the-great-divide/" rel="noopener noreferrer"&gt;The Great Divide&lt;/a&gt; in front-end-land. We also use this as an opportunity to gush on how much &lt;a href="https://css-tricks.com" rel="noopener noreferrer"&gt;CSS-Tricks&lt;/a&gt; has done for the community, get Chris' perspective on the history of the website, and finish up by sharing some &lt;em&gt;amazing&lt;/em&gt; Pens on &lt;a href="https://codepen.io" rel="noopener noreferrer"&gt;CodePen.io&lt;/a&gt;.&lt;/p&gt;


&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/jsparty/the-great-divide-reprise"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;The great divide reprise&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/jsparty"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        JS Party
      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-the-great-divide-reprise" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-the-great-divide-reprise" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-the-great-divide-reprise" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-the-great-divide-reprise" alt="JS Party" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F46%2Fce547895-87b7-4443-a752-3ea70febb311.svg"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-the-great-divide-reprise"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/jsparty/the-great-divide-reprise"&gt;
      &lt;img id="episode-profile-image" alt="The great divide reprise" width="420" height="420" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F46%2Fce547895-87b7-4443-a752-3ea70febb311.svg"&gt;
      &lt;img id="animated-bars" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fanimated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fvolume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fvolume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Get the show notes and transcript &lt;a href="https://changelog.com/jsparty/67" rel="noopener noreferrer"&gt;on changelog.com&lt;/a&gt; ✊&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>career</category>
      <category>podcast</category>
    </item>
    <item>
      <title>There are plenty of good reasons to do open source for free</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Thu, 28 Mar 2019 14:52:16 +0000</pubDate>
      <link>https://dev.to/jerodsanto/there-are-plenty-of-good-reasons-to-do-open-source-for-free-2i9p</link>
      <guid>https://dev.to/jerodsanto/there-are-plenty-of-good-reasons-to-do-open-source-for-free-2i9p</guid>
      <description>&lt;p&gt;We recently &lt;a href="https://changelog.com/news/Q3ZM"&gt;covered a post&lt;/a&gt; on Tidelift's blog&lt;sup id="fnref1"&gt;1&lt;/sup&gt;, where &lt;a href="https://twitter.com/havocp"&gt;Havoc Pennington&lt;/a&gt; makes the argument that &lt;a href="https://blog.tidelift.com/open-source-has-a-working-for-free-problem"&gt;open source has a working-for-free problem&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The narrative around open source is that it's completely OK—even an expectation—that we're all doing this for fun and exposure; and that giant companies should get &lt;em&gt;huge publicity credit&lt;/em&gt; for throwing peanuts-to-them &lt;em&gt;donations&lt;/em&gt; at a small subset of open source projects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;He also likens the plight of the open sourcerer to that of the reluctant designer who submits hermself to &lt;a href="https://www.nospec.com/"&gt;spec work&lt;/a&gt; in the hopes of future compensation. I don't think that analogy is usefully transferrable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the spec work analogy falls flat
&lt;/h2&gt;

&lt;p&gt;When a designer creates spec work, they are &lt;em&gt;speculating&lt;/em&gt; about the future value of that work. Hence the name. Most often this work is prompted by a 3rd-party who hangs that future value from a stick and dangles it a few inches from the designer's nose. This is problematic, because:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The designers work for free and with an often falsely advertised, overinflated promise for future employment; or are given other insufficient forms of compensation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open source software, on the other hand, is rarely (ever?) conceived under these circumstances. We've &lt;a href="https://changelog.com/podcast"&gt;talked with&lt;/a&gt; &lt;em&gt;many&lt;/em&gt; open source developers over the years and I've never heard a Genesis story that sounded like spec work. The reasons we hear why people create open source usually sound like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I was scratching my own itch"&lt;/p&gt;

&lt;p&gt;"None of the existing solutions fit my needs"&lt;/p&gt;

&lt;p&gt;"I thought others might find it useful"&lt;/p&gt;

&lt;p&gt;"It's my little gift to the world"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Designers begrudgingly submit spec work. Developers joyfully open source their work.&lt;/p&gt;

&lt;h2&gt;
  
  
  We still have a problem
&lt;/h2&gt;

&lt;p&gt;I think it's worth drawing the distinction above, but do not misread my overall sentiment: I do believe there's a money problem in open source. If you listen to our shows you know I believe that. It's just that in open source that problem doesn't manifest until &lt;em&gt;much later&lt;/em&gt; in the process.&lt;/p&gt;

&lt;p&gt;It waits until the software has matured, the value has been proven, the community has been built. Then, it sucks the &lt;em&gt;joy&lt;/em&gt; out of the developer(s) who gave a gift to the world and turns it in to the worst kind of job. An unpaid job!&lt;/p&gt;

&lt;h2&gt;
  
  
  Focusing on the 'why'
&lt;/h2&gt;

&lt;p&gt;So, going back to the beginning. If you open source your work to (speculatively) make lots of money... you're doing it wrong. There are much easier means to that end. But there are &lt;em&gt;plenty&lt;/em&gt; of good reasons to do open source for free. Here's three of them:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Free is accessible
&lt;/h3&gt;

&lt;p&gt;If you want your software to improve the lives of as many people in the world as possible, do it for free&lt;sup id="fnref2"&gt;2&lt;/sup&gt;. The fact is that many people can't afford to buy your software and many of those who &lt;em&gt;can&lt;/em&gt; afford to buy it won't anyways. This 'why' was described wonderfully by &lt;a href="https://twitter.com/kapouer"&gt;Jérémy Lal&lt;/a&gt; with this comment (emphasis added):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’ve been contributing to open-source for more than ten years. Why ? because open-source made software accessible to people without funds to try new and crazy ideas. Not for exposure, not for publicity, and certainly not for big companies. Open-source, and free licenses, are the nicest thing that ever happened to humanity. Also i did not make a single dollar out of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Free is payment
&lt;/h3&gt;

&lt;p&gt;That may sound like a contradiction, but hear me out. The reason that I began producing open source software was because I had benefited from so much of it. I cut my developer teeth on &lt;a href="https://changelog.com/topic/vim"&gt;Vim&lt;/a&gt; and the &lt;a href="https://changelog.com/topic/cli"&gt;Linux command-line&lt;/a&gt;. I started my career writing Perl scripts and later &lt;a href="https://changelog.com/topic/ruby"&gt;Ruby&lt;/a&gt; and Rails-based web applications. The saying, "we stand on the shoulders of giants" may be cliché now, but clichés become clichés because of their wide application!&lt;/p&gt;

&lt;p&gt;When I came to a point with my developer skills where I was confident &lt;em&gt;enough&lt;/em&gt; to contribute back, I felt obliged to do so. It's a small way of &lt;a href="https://www.imdb.com/title/tt0223897"&gt;paying it forward&lt;/a&gt;, or in other words: payment for all of the freeloading I'd been doing&lt;sup id="fnref3"&gt;3&lt;/sup&gt;. I don't think I'm alone in this.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Free is fun
&lt;/h3&gt;

&lt;p&gt;Open source has grown and matured over the years, but let's not forget that much of open source software exists because &lt;em&gt;the creators were just having fun&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There's nothing fun about enforcing the commercial side of a license. There's nothing fun about picking which features go in the 'open core' and which features require payment. There's nothing fun about selling support or hosting.&lt;/p&gt;

&lt;p&gt;What &lt;em&gt;is&lt;/em&gt; fun is creating something new, giving it a name, and just putting it out there to freely be used and enjoyed by others.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about you?
&lt;/h2&gt;

&lt;p&gt;I'd love to hear the 'why' behind your open source work. Are you hoping to get a job from your efforts? Is fame the driving factor? Are you paying it forward or just having fun? Sound off in the comments and feel free to link up your project(s) so others might join you in your work. ✊&lt;/p&gt;




&lt;ul&gt;
&lt;li id="fn1"&gt;
&lt;p&gt;Disclosure: TideLift sponsors changelog.com. We only partner with folks who ensure our editorial and creative freedom.↩&lt;/p&gt;


&lt;/li&gt;
&lt;li id="fn2"&gt;

&lt;p&gt;It &lt;em&gt;must&lt;/em&gt; be free as in beer. It &lt;em&gt;might&lt;/em&gt; be free as in freedom, too.↩&lt;/p&gt;


&lt;/li&gt;
&lt;li id="fn3"&gt;

&lt;p&gt;And continue to do! 😉↩&lt;/p&gt;


&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>career</category>
    </item>
    <item>
      <title>GitHub Actions is the next big thing</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Thu, 24 Jan 2019 15:18:12 +0000</pubDate>
      <link>https://dev.to/jerodsanto/github-actions-is-the-next-big-thing-48d0</link>
      <guid>https://dev.to/jerodsanto/github-actions-is-the-next-big-thing-48d0</guid>
      <description>&lt;p&gt;This is a &lt;em&gt;must-listen&lt;/em&gt; episode of &lt;a href="https://changelog.com/podcast" rel="noopener noreferrer"&gt;The Changelog&lt;/a&gt; with &lt;a href="https://twitter.com/kdaigle" rel="noopener noreferrer"&gt;Kyle Daigle&lt;/a&gt; (GitHub's Director of Ecosystem Engineering). ICYMI: &lt;a href="https://github.com/actions" rel="noopener noreferrer"&gt;Actions&lt;/a&gt; is GitHub's new automation platform that was announced in October and is still in beta.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build your container apps, publish packages to registries, or automate welcoming new users to your open source projects — with access to interact with the full GitHub API and any other public APIs, Actions seem to have limitless possibilities.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/changelog/331-github-actions-is-the-next-big-thing"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;331: GitHub Actions is the next big thing&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/changelog"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        The Changelog
      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-331-github-actions-is-the-next-big-thing" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-331-github-actions-is-the-next-big-thing" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-331-github-actions-is-the-next-big-thing" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-331-github-actions-is-the-next-big-thing" alt="The Changelog" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F4%2F3cxeLxCy.jpg"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-331-github-actions-is-the-next-big-thing"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/changelog/331-github-actions-is-the-next-big-thing"&gt;
      &lt;img id="episode-profile-image" alt="331: GitHub Actions is the next big thing" width="420" height="420" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F4%2F3cxeLxCy.jpg"&gt;
      &lt;img id="animated-bars" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fanimated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fvolume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fvolume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Get the show notes and transcript (coming soon) &lt;a href="https://changelog.com/podcast/331" rel="noopener noreferrer"&gt;on changelog.com&lt;/a&gt; ✊&lt;/p&gt;

</description>
      <category>github</category>
      <category>podcast</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>3 ways to retain your dev flow between sessions 💪</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Thu, 17 Jan 2019 15:27:58 +0000</pubDate>
      <link>https://dev.to/jerodsanto/3-ways-to-retain-your-dev-flow-between-sessions--4if2</link>
      <guid>https://dev.to/jerodsanto/3-ways-to-retain-your-dev-flow-between-sessions--4if2</guid>
      <description>&lt;p&gt;Context switching. Computers are great at it, &lt;em&gt;humans suck at it&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Every time we developers lose the context of our current task we're forced to waste precious time getting it back. The harder the problem we're trying to solve, the longer it takes to reinstate its context in our mind. This is why many developers strive to reduce interruptions, set aside large blocks of time, and create an environment that helps them get into the &lt;a href="https://amzn.to/hL0XDk" rel="noopener noreferrer"&gt;flow&lt;/a&gt; &lt;em&gt;and stay there&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The problem is, there are times when we absolutely must leave our development context behind and pick it back up later. Sometimes it's 30 minutes, sometimes it's overnight. I find these times very frustrating and have found a few techniques that help me quickly get my flow back upon returning.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Note to self
&lt;/h2&gt;

&lt;p&gt;Leave yourself a little note saying what you were up to. This is probably the most obvious technique, and can be quite effective. The problem I've found with this is that I often forget to do it or am just too tired/lazy at the end of the day to do it consistently.&lt;/p&gt;

&lt;p&gt;I need to write myself a note to remind myself to write myself notes. Guh, yeah.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Always be failing
&lt;/h2&gt;

&lt;p&gt;Leave one or more tests in your test suite failing (you are writing tests, yes?). When you return to the project your first step is to run the test suite and you'll see the failing test(s). This one works really well, but much like leaving yourself notes it's something that you have to actively participate in. It can actually take more time and effort to employ than leaving notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Git dirty
&lt;/h2&gt;

&lt;p&gt;This is my favorite and most oft used technique. Leave your Git (or the DVCS of your choice) staging area in a dirty state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fkwu7rfdqtcdch2zndyb3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fkwu7rfdqtcdch2zndyb3.jpg" alt="git dirty"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you return, you'll see all the changes you most recently made before you left off. This, combined with a quick perusal of the commit log will quickly bring your context back. The advantage of this over the others is that it is somewhat participation-free. Simply &lt;em&gt;fail to&lt;/em&gt; commit your last changes and they'll be there waiting for you. At least for me, this is far more likely to happen than technique #1 or #2.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. ???
&lt;/h2&gt;

&lt;p&gt;Those are a few things I've been doing to get my dev flow back quickly, but I'm sure there are others. Do you have any tricks up your sleeve? I'd love to hear 'em!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
      <category>devtips</category>
    </item>
    <item>
      <title>Graph databases 101</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Tue, 20 Nov 2018 14:31:31 +0000</pubDate>
      <link>https://dev.to/jerodsanto/graph-databases-101-4iop</link>
      <guid>https://dev.to/jerodsanto/graph-databases-101-4iop</guid>
      <description>&lt;p&gt;&lt;a href="https://dgraph.io/" rel="noopener noreferrer"&gt;Dgraph&lt;/a&gt; founder &lt;a href="https://twitter.com/manishrjain" rel="noopener noreferrer"&gt;Manish R Jain&lt;/a&gt; gave us an &lt;em&gt;excellent&lt;/em&gt; explanation of graph databases on &lt;a href="https://changelog.com/podcast/322" rel="noopener noreferrer"&gt;episode 322 of The Changelog&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Thanks to listener &lt;a href="https://twitter.com/MisterGenest" rel="noopener noreferrer"&gt;Evan Genest&lt;/a&gt; for highlighting this fact &lt;a href="https://twitter.com/MisterGenest/status/1063224954446069761" rel="noopener noreferrer"&gt;on Twitter&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I extracted that section from our trusty &lt;a href="https://changelog.com/podcast/322#transcript-34" rel="noopener noreferrer"&gt;episode transcript&lt;/a&gt; for your reading pleasure:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I think graphs are probably the simplest things to think about, really. People think about SQL tables - you have a row and you have some columns. Think of a graph as three columns where you have a subject, a predicate, and an object. If you put together a whole bunch of these things, you get a graph. A subject is essentially – think of it as an entity; a predicate is the relationship, and the object is either another entity, or a value.&lt;/p&gt;

&lt;p&gt;The subject could be, let’s say, me. The relationship might be “lives in” and object might be “San Francisco.” Or it could be me - the name is Manish, and that’s sort of like a property. So you just put together a whole bunch of these facts, or triples, and you get a graph.&lt;/p&gt;

&lt;p&gt;Then other people who live in San Francisco would have similar facts, and then you could run a graph query around “Hey, tell me all the people who live in San Francisco and who eat sushi.” So you pick up all the people who live in San Francisco, you intersect with people in the world who eat sushi - which are completely different facts. You didn’t create them as “This person lives in San Francisco AND eats sushi.” This is something that we’re doing on the fly. So you pick up all the people in San Francisco, you pick up all the people in the world who eat sushi, you intersect the two lists, and now you get people in San Francisco who eat sushi. Now you can take that result and say “Intersect it with all the people who have been to Japan.” You pick up another list of people who have been to Japan, intersect it with this, and now you get people who live in San Francisco, who eat sushi, and who have been to Japan.&lt;/p&gt;

&lt;p&gt;So the power of graphs is really in these joins that you can do, coming from just very simple facts.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Listen for yourself &lt;a href="https://changelog.com/podcast/322#t=30:09" rel="noopener noreferrer"&gt;starting at 30:09&lt;/a&gt; or start right from the top: &lt;/p&gt;


&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/changelog/322-there-and-back-again-dgraphs-tale"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;322: There and back again (Dgraph's tale)&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/changelog"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        The Changelog
      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-322-there-and-back-again-dgraphs-tale" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-322-there-and-back-again-dgraphs-tale" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-322-there-and-back-again-dgraphs-tale" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-322-there-and-back-again-dgraphs-tale" alt="The Changelog" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F4%2F3cxeLxCy.jpg"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-322-there-and-back-again-dgraphs-tale"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/changelog/322-there-and-back-again-dgraphs-tale"&gt;
      &lt;img id="episode-profile-image" alt="322: There and back again (Dgraph's tale)" width="420" height="420" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F4%2F3cxeLxCy.jpg"&gt;
      &lt;img id="animated-bars" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fanimated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fvolume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fvolume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Thanks, Manish! 💚💚💚&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>explainlikeimfive</category>
      <category>database</category>
    </item>
    <item>
      <title>Drupal is a pretty big deal 🎙</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Thu, 01 Nov 2018 13:51:13 +0000</pubDate>
      <link>https://dev.to/jerodsanto/drupal-is-a-pretty-big-deal--25i7</link>
      <guid>https://dev.to/jerodsanto/drupal-is-a-pretty-big-deal--25i7</guid>
      <description>&lt;p&gt;Did you know &lt;a href="https://www.drupal.org" rel="noopener noreferrer"&gt;Drupal&lt;/a&gt; has racked up over &lt;strong&gt;40,000 contributors&lt;/strong&gt; since it was first created in 2001?! Neither did we, until the &lt;em&gt;super awesome&lt;/em&gt; &lt;a href="https://twitter.com/webchick" rel="noopener noreferrer"&gt;Angie Byron&lt;/a&gt; joined us on &lt;a href="https://changelog.com/podcast" rel="noopener noreferrer"&gt;The Changelog&lt;/a&gt; last week to tell us all about it.&lt;/p&gt;

&lt;p&gt;We also learned just how &lt;em&gt;awesome&lt;/em&gt; the Drupal community is (much like Dev.to!) and how they work to keep that the case. You don't want to miss this episode:&lt;/p&gt;


&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/changelog/321-drupal-is-a-pretty-big-deal"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;321: Drupal is a pretty big deal&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/changelog"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        The Changelog
      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-321-drupal-is-a-pretty-big-deal" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-321-drupal-is-a-pretty-big-deal" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-321-drupal-is-a-pretty-big-deal" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-321-drupal-is-a-pretty-big-deal" alt="The Changelog" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F4%2F3cxeLxCy.jpg"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-321-drupal-is-a-pretty-big-deal"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/changelog/321-drupal-is-a-pretty-big-deal"&gt;
      &lt;img id="episode-profile-image" alt="321: Drupal is a pretty big deal" width="420" height="420" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fpodcast%2Fimage%2F4%2F3cxeLxCy.jpg"&gt;
      &lt;img id="animated-bars" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fanimated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fplaybutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fpausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fvolume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fvolume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Find the full show notes and transcript on &lt;a href="https://changelog.com/podcast/321" rel="noopener noreferrer"&gt;changelog.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>php</category>
      <category>podcast</category>
      <category>opensource</category>
      <category>drupal</category>
    </item>
    <item>
      <title>Make an open source maintainer's day with this one weird trick</title>
      <dc:creator>Jerod Santo</dc:creator>
      <pubDate>Mon, 22 Oct 2018 13:51:20 +0000</pubDate>
      <link>https://dev.to/jerodsanto/make-an-open-source-maintainers-day-with-this-one-weird-trick-4lpg</link>
      <guid>https://dev.to/jerodsanto/make-an-open-source-maintainers-day-with-this-one-weird-trick-4lpg</guid>
      <description>&lt;p&gt;Little bits of appreciation can make &lt;em&gt;big&lt;/em&gt; differences in maintainers' lives. Here's one way you can show appreciation that will &lt;strong&gt;take less than five minutes out of your day and just might make someone else's&lt;/strong&gt;. 🙌&lt;/p&gt;

&lt;h2&gt;
  
  
  The one weird trick
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Think of an open source project that you use often.&lt;/li&gt;
&lt;li&gt;Open your browser to its GitHub Issues (or alternate platform equivalent).&lt;/li&gt;
&lt;li&gt;Open an issue, thanking the maintainer(s).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's all there is to it! Weird, right? Let me get out ahead of some FAQs. 💡&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I pick an open source project to thank?
&lt;/h3&gt;

&lt;p&gt;Tools are easy: just think about what you've been using lately to get stuff done. Chances are it's open source! Libraries are even easier: check your &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;Gemfile&lt;/code&gt;, or &lt;code&gt;Cargo.toml&lt;/code&gt; and find a dependency that has made your life easier. Done and done!&lt;/p&gt;

&lt;h3&gt;
  
  
  What do I put in the Issue subject?
&lt;/h3&gt;

&lt;p&gt;I suggest going with "Thanks!", but feel free to get creative with it. 😀&lt;/p&gt;

&lt;h3&gt;
  
  
  What do I say in the Issue body?
&lt;/h3&gt;

&lt;p&gt;Tell them how long you've used the thing, how it's made your life easier, why you think it's awesome, etc. You don't have to write a book! &lt;/p&gt;

&lt;p&gt;I also like to mention that I expect them to immediately close the issue, to spare them the awkward decision of whether or not to keep it open indefinitely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I have to use Issues?
&lt;/h3&gt;

&lt;p&gt;No way! Tweet at them, email them, or send them a letter by carrier pigeon. It doesn't really matter which medium you use. It only matters that go out of your way to say thanks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do you actually do this, Jerod?
&lt;/h3&gt;

&lt;p&gt;Yes! But not as often as I should. Most recently, I realized just how much time I'd saved thanks to the &lt;em&gt;excellent&lt;/em&gt; &lt;a href="https://github.com/edgurgel/httpoison"&gt;HTTPoison&lt;/a&gt; library, so I thanked the author. It made Eduardo's day, which subsequently made my day, too! Weird how that works, huh?&lt;/p&gt;

&lt;h2&gt;
  
  
  A bonus trick 🎁
&lt;/h2&gt;

&lt;p&gt;If you want to go the extra mile, &lt;a href="https://changelog.com/jsparty"&gt;JS Party&lt;/a&gt; panelist &lt;a href="https://feross.org"&gt;Feross&lt;/a&gt; has a  super cool npm package called &lt;a href="https://github.com/feross/thanks"&gt;thanks&lt;/a&gt;. It will crawl your &lt;code&gt;package.json&lt;/code&gt; and print out a list of maintainers who accept donations. Because &lt;em&gt;saying&lt;/em&gt; thanks can make someone's day, but &lt;em&gt;giving&lt;/em&gt; thanks is on a whole other level. 💚&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>github</category>
      <category>devtips</category>
    </item>
  </channel>
</rss>
