<?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: Alex Smith</title>
    <description>The latest articles on DEV Community by Alex Smith (@atsmith813).</description>
    <link>https://dev.to/atsmith813</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%2F285767%2F1fbaf617-968e-4088-91fc-4906b156f01e.png</url>
      <title>DEV Community: Alex Smith</title>
      <link>https://dev.to/atsmith813</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/atsmith813"/>
    <language>en</language>
    <item>
      <title>Confession: I'm a Vim user</title>
      <dc:creator>Alex Smith</dc:creator>
      <pubDate>Thu, 12 Mar 2020 00:48:21 +0000</pubDate>
      <link>https://dev.to/atsmith813/confession-i-m-a-vim-user-2nel</link>
      <guid>https://dev.to/atsmith813/confession-i-m-a-vim-user-2nel</guid>
      <description>&lt;p&gt;I have a confession to make...I'm one of &lt;em&gt;those&lt;/em&gt; people - an avid Vim user. I do my absolute best to not reveal that fact. It can be a polarizing subject in the community. I'm here to confess I'm strongly on team Vim.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I learned Vim
&lt;/h3&gt;

&lt;p&gt;When I first started Software Engineering the developers I was working with used &lt;a href="https://tmate.io/"&gt;tmate&lt;/a&gt; to do pair coding. If you're not familiar, it's terminal sharing via SSH. This was a time before many of the now popular tools such as &lt;a href="https://teletype.atom.io/"&gt;Teletype for Atom&lt;/a&gt; or &lt;a href="https://visualstudio.microsoft.com/services/live-share/"&gt;Visual Studio Live Share&lt;/a&gt; were a thing. When in the terminal Vim is a natural choice. I learned by doing because I wanted to participate in pair coding. I also ran through &lt;code&gt;vimtutor&lt;/code&gt; a few times.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I still use Vim
&lt;/h3&gt;

&lt;p&gt;My professional background is actually in Finance - I used to work on Wall Street. In that field, there's a strong culture that you should &lt;strong&gt;N-E-V-E-R&lt;/strong&gt; be touching your mouse when using Excel. It even got to a point where analysts were &lt;a href="https://www.businessinsider.com/the-one-key-that-infuriates-bankers-so-much-theyll-pop-it-out-of-their-keyboards-2012-5"&gt;ripping off the F1 key from their keyboard&lt;/a&gt; so they wouldn't accidentally open the &lt;em&gt;Help Me&lt;/em&gt; window which often crashed Excel.&lt;/p&gt;

&lt;p&gt;Over time I was all-in on this idea of never touching the mouse to perform my work. I realized it's very efficient and actually kind of fun 🙈.&lt;/p&gt;

&lt;p&gt;Once I discovered Vim I didn't need any convincing. It was a natural fit for me. I have tried several editors (Atom, Sublime, VS Code) with Vim mode enabled and they're all great for different reasons! But I can't help be drawn to the "purist" feel of using straight Vim where there are fewer helpers. And while &lt;em&gt;most&lt;/em&gt; keyboard shortcuts work in other editors with Vim mode enabled, not &lt;em&gt;all&lt;/em&gt; of them do without adding it yourself (looking at you &lt;code&gt;:w&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  My Vim setup
&lt;/h3&gt;

&lt;p&gt;What's funny is overtime I've added several plugins to my Vim setup (including an autocomplete using &lt;a href="https://github.com/ycm-core/YouCompleteMe"&gt;YouCompleteMe&lt;/a&gt;). So in some ways I recognize I'm contradicting myself 🤷🏽‍♂️.&lt;/p&gt;

&lt;p&gt;Here is my current Vim setup if you're curious:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  What do you think?
&lt;/h3&gt;

&lt;p&gt;Feels great to confess all of this! What are your thoughts? Do you like Vim? Do you hate it?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>vim</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How do you get familiar with a new codebase?</title>
      <dc:creator>Alex Smith</dc:creator>
      <pubDate>Wed, 05 Feb 2020 19:13:10 +0000</pubDate>
      <link>https://dev.to/atsmith813/how-do-you-get-familiar-with-a-new-codebase-4106</link>
      <guid>https://dev.to/atsmith813/how-do-you-get-familiar-with-a-new-codebase-4106</guid>
      <description>&lt;p&gt;I recently started a new gig as a Software Engineer here at DEV. And having changed jobs a few times, one of the more difficult things of starting a new role is getting up to speed with a new codebase.&lt;/p&gt;

&lt;p&gt;When learning Software Engineering (school, bootcamps, online tutorials, etc.) you're often starting from scratch or you're building a project where everything is defined upfront. For example, if you have done a Rails tutorial you've likely built a blog with a limited feature set. Decisions made in that tutorial were likely based on a defined scope - build a blog where users can create, edit, and delete articles. And then you're off to the races (shout out to scaffolding).&lt;/p&gt;

&lt;p&gt;But like in many fields, this is great...&lt;em&gt;in theory&lt;/em&gt;. In the "real world", you can often find yourself walking into an established codebase that has been through a lot.&lt;/p&gt;

&lt;p&gt;And what ends up happening is you end up finding lots of code that makes you pause and wonder, &lt;em&gt;"why was this done this way!?"&lt;/em&gt;. Sometimes there's a good answer for that, but it's some historical piece of context that leaves you having to ask someone who has been around longer.&lt;/p&gt;

&lt;p&gt;So my questions to you all are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do you get up and running with a new and established codebase?&lt;/li&gt;
&lt;li&gt;What tools do you use, if any?&lt;/li&gt;
&lt;li&gt;What sort of tools do you wish you had to help with this?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I recently came across &lt;a href="https://usecodeflow.com/"&gt;Codeflow&lt;/a&gt;(0 affiliation, but it's a solid example) and I have had ideas in the past about building a tool to help onboard Software Engineers to a new codebase.&lt;/p&gt;

&lt;p&gt;Lastly, it's worth noting that I realize that in an ideal world things would be clearly documented and kept up to date. This is all assuming the trade-off was made to (more or less) skip detailed documentation of nuances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you think?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>beginners</category>
      <category>help</category>
    </item>
    <item>
      <title>New Year, New Opportunity, Same Me: I've Joined the DEV Team!</title>
      <dc:creator>Alex Smith</dc:creator>
      <pubDate>Tue, 14 Jan 2020 18:09:24 +0000</pubDate>
      <link>https://dev.to/atsmith813/new-year-new-opportunity-same-me-i-ve-joined-the-dev-team-47k8</link>
      <guid>https://dev.to/atsmith813/new-year-new-opportunity-same-me-i-ve-joined-the-dev-team-47k8</guid>
      <description>&lt;p&gt;What better way to ring in the new year than a fresh start with an amazing team at DEV? I'm very excited to announce that I have joined the DEV team as a Software Engineer!&lt;/p&gt;

&lt;h1&gt;
  
  
  Why I joined DEV
&lt;/h1&gt;

&lt;p&gt;My greatest passions are teaching and community. DEV is very much the ideal intersection of both.&lt;/p&gt;

&lt;p&gt;Coming from (in many ways) a non-traditional background, I was very fortunate to have a couple of really good mentors to help welcome me into the community when I first got started with Software Engineering. Since then, I've always had this burning desire to give back and help others to land the same or better opportunities than what was available to me.&lt;/p&gt;

&lt;p&gt;Further building on the community, I love that DEV is open-source. After dipping my toes into the open-source world by writing a &lt;a href="https://github.com/intrinio/technical-analysis"&gt;Ruby gem to perform technical analysis on security prices&lt;/a&gt;, I was eager to contribute more and DEV is a fantastic community to contribute to.&lt;/p&gt;

&lt;p&gt;In short, I'm hoping my skills and my unique background will be a value-add to the DEV team and the DEV community as a whole. I'm stoked to get started!&lt;/p&gt;

&lt;h1&gt;
  
  
  A quick bit about me
&lt;/h1&gt;

&lt;p&gt;A borderline cold brew coffee addict and a Florida native currently residing in Los Angeles, California, my name is Alex and it's a pleasure to e-meet you. If I had to describe a "personal mission statement", I'd say that mine is to provide others with opportunities - especially if it helps them move up the so-called socio-economic ladder.&lt;/p&gt;

&lt;p&gt;While I've been doing Software Engineering for a few years, I actually started my career in Finance and I used to work on Wall Street. I'm always excited to learn new languages and I have varying levels of experience in several languages including Ruby, JavaScript, Python, Elixir, Java, and C#.&lt;/p&gt;

&lt;p&gt;If you ever have any questions, comments, or just want to chat, feel free to reach out!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In the spirit of the new year, my resolution/biggest goal for 2020 is to rescue a dog. Feel free to hold me accountable to this in any way you see fit (including, but not limited to, endless pictures and memes of dogs)&lt;/em&gt; 😀&lt;/p&gt;

</description>
      <category>career</category>
      <category>meta</category>
      <category>news</category>
    </item>
    <item>
      <title>How to build an SMS/text birthday reminder bot using Ruby, Twilio, and Google Sheets</title>
      <dc:creator>Alex Smith</dc:creator>
      <pubDate>Thu, 05 Dec 2019 04:56:04 +0000</pubDate>
      <link>https://dev.to/atsmith813/how-to-build-an-sms-text-birthday-reminder-bot-using-ruby-twilio-and-google-sheets-1o6l</link>
      <guid>https://dev.to/atsmith813/how-to-build-an-sms-text-birthday-reminder-bot-using-ruby-twilio-and-google-sheets-1o6l</guid>
      <description>&lt;p&gt;I’ve always wanted a better way to keep up with friends and family by wishing them a happy birthday. Most people post something short and sweet when they see the notification on Facebook while they’re surfing the feed for a fresh dopamine hit. Yes, I’m one of those people who doesn’t use their Facebook anymore.&lt;/p&gt;

&lt;p&gt;So for those of you who are like me (don’t use Facebook and want to wish others a happy birthday via text) keep reading to see how I built a little platform to help me accomplish this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PHWcrM97--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8kny6ae0mfydtsmumub0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PHWcrM97--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/8kny6ae0mfydtsmumub0.png" alt="Screenshot of texts from the Birthday Bot on my iPhone"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Goal — Create a Birthday Bot 🤖
&lt;/h2&gt;

&lt;p&gt;The goal is to receive a text message every day with the list of names of people whose birthday is on that day or a message that reads &lt;em&gt;“No birthdays today!”&lt;/em&gt;. To start, I want it to be sent at 11 am PST. Let’s build a little “bot” (that will be hosted on Heroku) to help us out 🤖.&lt;/p&gt;

&lt;p&gt;The bot will work as follows in 3 simple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Every day, the bot will run and read birthdays from a Google Sheet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the bot finds birthdays that are on the current date, it will text me with a list of names of each person whose birthday it is. Otherwise, it will text me &lt;em&gt;“No birthdays today!”&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The bot will then update the birthdate of each of these people to one year in the future.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Process
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Getting the data/list of birthdays
&lt;/h3&gt;

&lt;p&gt;The first step is to somehow get the data we need to supply our bot. As I mentioned above, Facebook used to be how I managed birthdays. But they somewhat recently &lt;a href="https://www.digitaltrends.com/news/facebook-removes-friends-birthday-export/"&gt;removed the ability to export birthdays from Facebook&lt;/a&gt;. To be fair, it was in the name of privacy so I can’t &lt;em&gt;really&lt;/em&gt; complain about that.&lt;/p&gt;

&lt;p&gt;So we need another way to get the data. As referenced in the &lt;a href="https://www.digitaltrends.com/news/facebook-removes-friends-birthday-export/"&gt;article&lt;/a&gt;, someone built a nice &lt;a href="https://github.com/mobeigi/fb2cal"&gt;workaround&lt;/a&gt;. By following the steps in the &lt;a href="https://github.com/mobeigi/fb2cal/blob/master/README.md"&gt;README&lt;/a&gt;, I was able to get all of the data I need.&lt;/p&gt;

&lt;p&gt;Here’s what I did:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Clone the repo &lt;code&gt;git clone git@github.com:mobeigi/fb2cal.git&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rename &lt;code&gt;config/config-template.ini&lt;/code&gt; to &lt;code&gt;config/config.ini&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In &lt;code&gt;config/config.ini&lt;/code&gt; add your Facebook email and password. Set &lt;code&gt;upload_to_drive&lt;/code&gt; to &lt;code&gt;False&lt;/code&gt;. Set &lt;code&gt;save_to_file&lt;/code&gt; to &lt;code&gt;True&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;pip3 install -r requirements.txt&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run &lt;code&gt;python3 ./src/fb2cal.py&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once you do this, you’ll see a &lt;code&gt;.ics&lt;/code&gt; file was created in your &lt;code&gt;/src&lt;/code&gt; directory (or whatever directory you set in your &lt;code&gt;config.ini&lt;/code&gt; file).&lt;/p&gt;

&lt;p&gt;I did it quick and dirty this way to just get the data locally. If you wanted to take this project to the next level, you could set up this Python script to run routinely, store the data on Google Drive, and then have our bot routinely read from that. For the sake of this post, I’m not going to do that since I don’t plan on continuing to use Facebook and therefore won’t have new birthdays to add.&lt;/p&gt;

&lt;p&gt;Later on in this post, I’m going to move the data to Google Sheets where our Bot will read from. That way, I can quickly add birthdays to the sheet from my phone and the Bot will take the new data into account.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: the &lt;a href="https://github.com/mobeigi/fb2cal"&gt;workaround&lt;/a&gt; does require a little bit of development background. The project is active, so if you have any questions or issues, try posting on the project first. I’m also happy to try and help as well — leave a comment below!&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Importing the data into the 🤖
&lt;/h3&gt;

&lt;p&gt;Now we’ll want to format this data in a way that our bot can easily import. I initially tried to use the &lt;a href="https://github.com/icalendar/icalendar"&gt;icalendar gem&lt;/a&gt; to import the data from our &lt;code&gt;birthdays.ics&lt;/code&gt; file. I wasn’t able to get this to work. Another option is to convert the &lt;code&gt;.ics&lt;/code&gt; file to a &lt;code&gt;.csv&lt;/code&gt; file using one of &lt;a href="https://www.google.com/search?q=ics+to+csv&amp;amp;oq=ics+to+csv"&gt;many free online converters&lt;/a&gt;. Depending on how you feel about security, this may be a suitable option for you.&lt;/p&gt;

&lt;p&gt;With the gem not working and me not wanting to use a converter, I decided to write a quick little Ruby script to parse the &lt;code&gt;.ics&lt;/code&gt; file. I don’t plan on doing this repeatedly and the &lt;code&gt;.ics&lt;/code&gt; file is essentially a &lt;code&gt;.txt&lt;/code&gt; file in a specific format, so we can grab the data we need by parsing out the file as one big string.&lt;/p&gt;

&lt;p&gt;Create a folder to house all of our work and navigate into it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir birthday_bot
cd birthday_bot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Again, I know this code is cringy, at best. I just wanted a quick and dirty way to do this initial upload one time.&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;So now we have all of our birthdays in an Array of Hashes with keys of &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;date&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The next thing we’re going to do is export this parsed data to Google Sheets. You could also just export the data to &lt;code&gt;.csv&lt;/code&gt; at the end of the above script and copy it to a Google Sheet, but since we’ll be interacting with Google Sheets with our bot to read birthdays anyways, it’s not that much more work to export it programmatically here.&lt;/p&gt;

&lt;p&gt;Twilio has a great &lt;a href="https://www.twilio.com/blog/2017/03/google-spreadsheets-ruby.html"&gt;guide&lt;/a&gt; on how to do this, including a nifty gif of a screen share walking through the steps. I’ll include the same steps below.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to the &lt;a href="https://console.developers.google.com/"&gt;Google APIs Console&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Enable API. Search for and enable the Google Drive API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create credentials for a Web Server to access Application Data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Name the service account and grant it a Project Role of Editor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download the JSON file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the JSON file to your &lt;code&gt;birthday_bot&lt;/code&gt; directory and rename it to &lt;code&gt;client_secret.json&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those are the credentials your application will need. They represent a user that can update spreadsheets on your behalf. We still need to give this user access to the spreadsheet we want to use though. Create a spreadsheet on your Google Drive named &lt;code&gt;birthday_bot&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Open &lt;code&gt;client_secret.json&lt;/code&gt; and find and copy the &lt;code&gt;client_email&lt;/code&gt;. In your spreadsheet click the “Share” button in the top right and paste the email, giving your service account edit rights.&lt;/p&gt;

&lt;p&gt;Once you have done this, we can get started on putting our birthdays into a Google Sheet.&lt;/p&gt;

&lt;p&gt;Start by creating a Gemfile in your root &lt;code&gt;birthday_bot/&lt;/code&gt; directory and paste in the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source "https://rubygems.org"

gem "google_drive"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then run &lt;code&gt;bundle install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now we can use the Array of Hashes stored in a variable named &lt;code&gt;birthdays&lt;/code&gt; from above and upload them to our Google Sheet:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;So now we have all of our exported birthdays from Facebook in Google Sheets. Log into your Google Drive and check out your &lt;code&gt;birthday_bot&lt;/code&gt; spreadsheet, you should see all the birthdays uploaded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building the Birthday Bot 🥳🤖
&lt;/h3&gt;

&lt;p&gt;Now let’s get to feeding our bot! If you look back at the 3 steps mentioned above as to how the bot will work, the first is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every day, the bot will run and read birthdays from a Google Sheet.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We’ll worry about the daily interval later — for now let’s get the bot reading from our Google Sheet.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;





&lt;p&gt;The next step is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the bot finds birthdays that are on the current date, it will text me with a list of names of each person whose birthday it is. Otherwise, it will text me “No birthdays today!”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To send the text message, we’ll need the help of &lt;a href="https://www.twilio.com/sms"&gt;Twilio&lt;/a&gt; to send text messages. &lt;a href="https://www.twilio.com/try-twilio"&gt;Sign up for Twilio&lt;/a&gt; and create a project. You can find a &lt;a href="https://www.twilio.com/docs/sms/quickstart/ruby"&gt;guide&lt;/a&gt; on how to do this or watch a &lt;a href="https://www.youtube.com/watch?v=8SLdV8dn7_I"&gt;video&lt;/a&gt; to get you started. It’s very quick.&lt;/p&gt;

&lt;p&gt;Once you’ve done that, make sure to take note of 3 things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Your Twilio phone number&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Account SID&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auth Token&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once you have these 3, you can easily send a text of the current day’s birthdays by doing:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;





&lt;p&gt;And, finally, the last step is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The bot will then update the birthdate of each of these people to one year in the future.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  Setting the bot to run daily
&lt;/h3&gt;

&lt;p&gt;You can deploy this script to a free dyno on Heroku and schedule this to run daily. For more on this, check out &lt;a href="https://github.com/atsmith813/birthday-bot"&gt;this repo&lt;/a&gt; where I packaged up this bot into a more organized Ruby project with some extra “nice to haves” like logging and error handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;There you have it — now your bot is up and running. You can run the cronjob locally on your machine or deploy it to something like Heroku so that it runs in the cloud. What do you think? Will you use this to help wish your friends and family a more personalized happy birthday?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/atsmith813/birthday-bot"&gt;&lt;strong&gt;Here&lt;/strong&gt;&lt;/a&gt; is all the code. Feel free to submit a pull request, issue, or fork it and add your own needs!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Why should you listen to me? You shouldn’t — do your research&lt;/em&gt; 😉&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you want to learn more about me you can check out my &lt;a href="https://twitter.com/A_Smith223"&gt;Twitter&lt;/a&gt; and my &lt;a href="https://hirealexsmith.com/about-me"&gt;website&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ruby</category>
    </item>
    <item>
      <title>The 3 Biggest Misconceptions About Diversity</title>
      <dc:creator>Alex Smith</dc:creator>
      <pubDate>Thu, 05 Dec 2019 04:27:50 +0000</pubDate>
      <link>https://dev.to/atsmith813/the-3-biggest-misconceptions-about-diversity-3hkm</link>
      <guid>https://dev.to/atsmith813/the-3-biggest-misconceptions-about-diversity-3hkm</guid>
      <description>&lt;p&gt;Diversity. The biggest topic in recruiting at the moment, companies all over the globe are scrambling to become thought leaders (&lt;em&gt;ugh&lt;/em&gt;) on the subject by trying out new ways to make the traditional recruitment process more diverse. Strategies that first come to mind are things like a more meritocratic approach using an anonymous work sample submission and partnering with a 3rd party that recruits and trains diverse individuals. Here are the 3 biggest misconceptions about diversity.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The definition of diversity
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“Diversity is being invited to the party; Inclusion is being asked to dance.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Diversity in corporate terms and in headlines is often defined by gender and/or race. But diversity is much wider than that. It can also be characterized by age, disabilities, diversity in thought, and much more. Diversity is looking into a crowd and not being able to describe a dominant “type” by the people in it. Similarly misunderstood, inclusion would be how integrated the crowd appears to be. Are people grouped up? Are these groups of the same type? Granted, this is a simplified example since not all definitions of diversity are easily visible. I’ll go into more detail on inclusion in a separate post.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. AI
&lt;/h2&gt;

&lt;p&gt;Quotas are also the poster child for AI (artificial inclusion) and can be a touchy subject. They’re like guilty pleasures — everyone has them but no one likes to talk about them. They serve as a great &lt;em&gt;starting point&lt;/em&gt; in changing the default behaviors of common recruitment processes. It basically forces those involved to consciously acknowledge diversity. But at the same time, it can kill inclusion. Because the diversity feels more forced and surface level, there are many social dynamics that arise which cause some difficult situations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quotas can undermine credibility
&lt;/h3&gt;

&lt;p&gt;“Quotas” can help get people from underrepresented communities to get their foot in the door and they can also lead others to think less of them. Using my own experience as an example I can think of several times where I’ve been discredited of my own success because of my race. I’ve been told it’s only because of my race that I won a scholarship, or got the promotion, or landed the deal. Maybe you’ve heard noise from both sides of the affirmative action that has made &lt;a href="https://www.cnn.com/2018/10/14/politics/harvard-affirmative-action-asian-americans/index.html"&gt;recent headlines&lt;/a&gt;. I’ve been told being a minority is &lt;em&gt;easier&lt;/em&gt;. It actually doesn’t make any sense to think of it that way, but I’ll reserve that rant for another time.&lt;/p&gt;

&lt;p&gt;The point here is that the success of people from more diverse backgrounds is often undermined by others simply because they’re diverse. This is a lose-lose situation and doesn’t do much to help solve the original issue of diversity, or lack thereof it. It more boldly draws a line in the sand between two sides.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. “We only hire the best talent, regardless of background”
&lt;/h2&gt;

&lt;p&gt;Let me be the first to stop you right there because you’re already down the wrong path if you’re trying to promote a culture of diversity and inclusion. You may as well dim the lights, turn up the music, and throw a giant party for all the biases that are about to walk through the front door.&lt;/p&gt;

&lt;p&gt;What defines “best” is up to the stakeholder(s) and that’s where a lot of bias creeps in no matter how unintentional it might be. Let’s use a Software Engineer as an example. When a Software Engineer is applying for jobs, it’s (&lt;em&gt;unfortunately&lt;/em&gt;) common for them to have to complete some sort of coding challenge. A common coding challenge like, “write a simple class in the language of your choice to represent a deck of cards with operations to shuffle the deck and to deal one card” introduces a lot of bias.&lt;/p&gt;

&lt;p&gt;Some might argue that you don’t need a computer science degree or a more traditional background to answer this question so the bias is mostly removed because anyone can answer it. If that’s the case, why are so many people who seem to do the “best” at this white males? That’s because this question and many like it are created by people from more traditional backgrounds and those from traditional backgrounds are better equipped to answer something like this.&lt;/p&gt;

&lt;p&gt;Is it a true test of skill? Maybe…if you’re building a borderline fraudulent card game app for more pre-teens to get mindlessly addicted to while you pump ads through it as if your income depends on it — because it does.&lt;/p&gt;

&lt;p&gt;Someone who doesn’t have any degree at all or has never even coded before could easily be a better learner and a smarter person, but the question isn’t set up to test for that. The question is a lay-up for those who have walked the path laid by the many fortunate people them. &lt;em&gt;It wouldn’t be a post without an obligatory sports reference, right?&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Machine learning and artificial intelligence: quantifying bias
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;I’m really on a roll with buzzwords. If someone created buzzword bingo, this post alone would lead someone to stand up and shout in victory.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Talking about actual AI (artificial intelligence) now, let’s look at another case of bias. Amazon, you may have heard of them, has a reputation for &lt;a href="https://www.fastcompany.com/90246028/how-ai-is-helping-amazon-become-a-trillion-dollar-company"&gt;ruthless automation&lt;/a&gt; and &lt;a href="https://twitter.com/dhh/status/1062381298084384768"&gt;looting cities across the country with its HQ2 lottery&lt;/a&gt;. Well, recently it’s been &lt;a href="https://www.reuters.com/article/us-amazon-com-jobs-automation-insight/amazon-scraps-secret-ai-recruiting-tool-that-showed-bias-against-women-idUSKCN1MK08G"&gt;reported&lt;/a&gt; that Amazon applied machine learning to its hiring process to observe patterns in applicant’s resumes and output the best candidates for review.&lt;/p&gt;

&lt;p&gt;So far it sounds great, right? Let’s take a moment to acknowledge that hiring and recruiting is hard, &lt;em&gt;hard&lt;/em&gt;, **hard **work. Trying to help that process with today’s technology sounds like a real value-add and a business opportunity.&lt;/p&gt;

&lt;p&gt;And as for the result?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.reuters.com/article/us-amazon-com-jobs-automation-insight/amazon-scraps-secret-ai-recruiting-tool-that-showed-bias-against-women-idUSKCN1MK08G"&gt;“In effect, Amazon’s system taught itself that male candidates were preferable.”&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Similar to the hiring pattern that included little diversity in the past, the system taught itself to use the same biases that humans have been making. This really goes to show just how prominent these biases are. It’s eye-opening.&lt;/p&gt;

&lt;h3&gt;
  
  
  “We don’t only hire white males, they just apply the most”
&lt;/h3&gt;

&lt;p&gt;Right — I get it. If 93% of applications are white males then simple probability would suggest that the majority of the team would naturally look like that. The supply problem.&lt;/p&gt;

&lt;p&gt;The issue here is recruiting tactics. When you recruit through traditional channels, you’re going to get traditional applicants. Different channels will yield different candidates. Far too to often do people recruit for diversity in traditional channels. An IVY league degree is a simplified example. Ah, but wait, &lt;a href="https://www.bbc.com/news/world-us-canada-40812196"&gt;Harvard had it’s first “majority non-white” intake last year&lt;/a&gt;. So some traditional channels have diversified ethnically, but remember that diversity isn’t only race and gender. There are many more examples of diversity, including socioeconomic status and disability.&lt;/p&gt;

&lt;p&gt;Just to touch on the far too common white male example here one last time, when you recruit out of universities or channels that are predominantly white males you’re not going to get as many diverse applicants. Quality diverse candidates most often don’t take the same paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  The solution
&lt;/h2&gt;

&lt;p&gt;Some real effort with a dash of self-awareness will go a long way. I know, I know — just ending with “do better” isn’t very helpful. But even just by making it this far, I hope diversity is even a half step closer to the top of your mind.&lt;/p&gt;

&lt;p&gt;Another solution is to partner with organizations that specialize in diversity recruiting. Just to name a few that I’m very familiar with from my network:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.seo-usa.org/"&gt;Seize Every Opportunity&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://ventureforamerica.org/"&gt;Venture for America&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://www.code2040.org/"&gt;Code2040&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me know what you think. I’d love to hear your thoughts as well!&lt;/p&gt;

&lt;h3&gt;
  
  
  Why should you listen to me?
&lt;/h3&gt;

&lt;p&gt;You shouldn’t. Educate yourself and make your &lt;em&gt;own&lt;/em&gt; decisions 💯. I just like to try to improve on my writing by putting my thoughts down from time to time.&lt;/p&gt;

</description>
      <category>inclusion</category>
      <category>hiring</category>
    </item>
  </channel>
</rss>
