<?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: Erik Anderson</title>
    <description>The latest articles on DEV Community by Erik Anderson (@datadeverik).</description>
    <link>https://dev.to/datadeverik</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%2F197498%2F9d374417-5bbf-4fc3-a268-699f4041692d.png</url>
      <title>DEV Community: Erik Anderson</title>
      <link>https://dev.to/datadeverik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/datadeverik"/>
    <language>en</language>
    <item>
      <title>Open Letter No. 1 To Ali Abdaal, Or, I Feel Personally Called Out</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Mon, 04 Sep 2023 10:26:24 +0000</pubDate>
      <link>https://dev.to/datadeverik/open-letter-no-1-to-ali-abdaal-or-i-feel-personally-called-out-4g39</link>
      <guid>https://dev.to/datadeverik/open-letter-no-1-to-ali-abdaal-or-i-feel-personally-called-out-4g39</guid>
      <description>&lt;h2&gt;
  
  
  Responding to "🚀 Real Work vs Fake Work"
&lt;/h2&gt;

&lt;p&gt;Hey friend,&lt;/p&gt;

&lt;p&gt;I read your Sunday Snippets email today with the title "🚀 Real Work vs Fake Work", and I feel personally called out.&lt;/p&gt;

&lt;p&gt;In the email, you said there's a difference between Real Work, which takes you towards the things that actually matter to you, and Fake work, which doesn't.&lt;/p&gt;

&lt;p&gt;And that already felt like it was talking about me, but it got worse.&lt;/p&gt;

&lt;p&gt;Later in the email, you said that an example of Fake Work is "to create content across social media with no way of attributing it back to the thing that really matters - sales."&lt;/p&gt;

&lt;p&gt;I'm sure I'm guilty of this. But, worse, I believe I'm guilty of creating content across social media without having any plan for how it will lead to sales.&lt;/p&gt;

&lt;p&gt;Often my content strategy goes something like this: Make a thing that I think people will want to watch because I find it interesting. Put it online and hope it builds an audience. Repeat and assume that someday I'll have an audience and someday, somehow, I'll sell something to them.&lt;/p&gt;

&lt;p&gt;That smells an awful lot like Fake Work to me.&lt;/p&gt;

&lt;p&gt;So how do I cut out Fake Work without completely giving up on creating content on social media?&lt;/p&gt;

&lt;p&gt;I think it's by defining a clear plan to sell something, and then working backward from there.&lt;/p&gt;

&lt;p&gt;Stay tuned to this blog to hear about my plan for selling something.&lt;/p&gt;

&lt;p&gt;And let me know whether you think writing and publishing this blog was Real Work or Fake Work.&lt;/p&gt;

&lt;p&gt;Erik&lt;/p&gt;

&lt;p&gt;Originally published on &lt;a href="https://blog.molineharbor.com"&gt;blog.molineharbor.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>learning</category>
    </item>
    <item>
      <title>tldr: A Delightful Command Line Tool For Programmers In A Hurry</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Tue, 22 Aug 2023 10:43:39 +0000</pubDate>
      <link>https://dev.to/datadeverik/tldr-a-delightful-command-line-tool-for-programmers-in-a-hurry-2lej</link>
      <guid>https://dev.to/datadeverik/tldr-a-delightful-command-line-tool-for-programmers-in-a-hurry-2lej</guid>
      <description>&lt;p&gt;Quick! You need to get a shell command to do what it's supposed to do for you and you don't have time to read a think &lt;code&gt;man&lt;/code&gt; page or scour the internet for tutorials.&lt;/p&gt;

&lt;p&gt;What can you do?&lt;/p&gt;

&lt;p&gt;Well, have I got the tool for you:&lt;/p&gt;

&lt;p&gt;It's called &lt;code&gt;tldr&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That stands for "Too Long, Didn't Read", and it's a command line tool that gives you short, thoughtful summaries of command line tool documentation with instructive examples.&lt;/p&gt;

&lt;p&gt;As an introduction, consider &lt;code&gt;pwd&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ tldr pwd

  pwd

  Print name of current/working directory.
  More information: https://www.gnu.org/software/coreutils/pwd.

  - Print the current directory:
    pwd

  - Print the current directory, and resolve all symlinks (i.e. show the "physical" path):
    pwd -P


➜  ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isn't that neat? And I honestly didn't know that part about the "physical" path.&lt;/p&gt;

&lt;p&gt;Let's say you need to work with Docker, but you don't know where to start. &lt;code&gt;tldr&lt;/code&gt; to the rescue!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ tldr docker

  docker

  Manage Docker containers and images.
  Some subcommands such as docker run have their own usage documentation.
  More information: https://docs.docker.com/engine/reference/commandline/cli/.

  - List all docker containers (running and stopped):
    docker ps --all

  - Start a container from an image, with a custom name:
    docker run --name container_name image

  - Start or stop an existing container:
    docker start|stop container_name

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: in the spirit of "too long, didn't read", I only shared the first half of the output for this example. But even just those three command examples give you a pretty good starting point with the &lt;code&gt;docker&lt;/code&gt; command, and with Docker as a whole, for that matter.&lt;/p&gt;

&lt;p&gt;How can you get &lt;code&gt;tldr&lt;/code&gt; in your terminal, in case you want to read the full entry for &lt;code&gt;docker&lt;/code&gt;, or have it available for all your command line reference needs?&lt;/p&gt;

&lt;p&gt;You can find all you need to get started at the appropriately short web address: &lt;a href="https://tldr.sh/"&gt;tldr.sh&lt;/a&gt;. There you can try an in-browser version or see instructions to install the tool on your machine.&lt;/p&gt;

&lt;p&gt;Happy coding, and I hope you find this delightful little tool helpful!&lt;/p&gt;

&lt;p&gt;[Edit: you can also see my video about this on YouTube]&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/uJj3qZx77M0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
      <category>docker</category>
    </item>
    <item>
      <title>How To Send Email With Python, Simply</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Mon, 21 Aug 2023 17:09:49 +0000</pubDate>
      <link>https://dev.to/datadeverik/how-to-send-email-with-python-simply-2c04</link>
      <guid>https://dev.to/datadeverik/how-to-send-email-with-python-simply-2c04</guid>
      <description>&lt;p&gt;Hello! I'm working on a video where I will use Python to send myself emails to help me sleep better.&lt;/p&gt;

&lt;p&gt;But in that video, I'd like to be able to assume that the audience knows how to send emails with Python. So this blog post, and the accompanying video, will show you a simple and programmer-friendly way to send email using gmail and Python.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/QK_d6jlvLlI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;p&gt;To begin with you should set up a virtual environment using Poetry. Poetry is my favorite package and virtual environment manager for Python.&lt;/p&gt;

&lt;p&gt;To set up a new directory with a new project manage by Poetry, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Poetry new simple_email
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then enter that directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;simple_email
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you are in the project folder you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Poetry add yagmail keyring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which will install the dependencies we need to work with gmail for this project.&lt;/p&gt;

&lt;p&gt;Next I will walk you through the source code. In the video I used &lt;code&gt;vim&lt;/code&gt;, but you may use any text editor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vim main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are writing code in &lt;code&gt;main.py&lt;/code&gt;. The first step is to import &lt;code&gt;yagmail&lt;/code&gt;, which we installed with Poetry in the previous step.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;yagmail&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;yag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;yagmail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SMTP&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case we are calling the constructor for the class SMTP in the package yagmail, and saving the resulting object to a variable namged &lt;code&gt;yag&lt;/code&gt;. That object will provide the functionality we need to send email via gmail.&lt;/p&gt;

&lt;p&gt;Next, write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;contents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s"&gt;"This is some test email content. Hello email reader."&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sets up the variable contents with a list of a single string containing the content for the email.&lt;/p&gt;

&lt;p&gt;Then the last step is to simply use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;yag&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'receiver@email.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'test email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;contents&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here '&lt;a href="mailto:receiver@email.com"&gt;receiver@email.com&lt;/a&gt;' is the email address of the person who will receive the email, 'test email' is the subject line of the email, and &lt;code&gt;contents&lt;/code&gt; go in the body of the email.&lt;/p&gt;

&lt;p&gt;The next step is to go to your Google account and set up an application password. Google will warn you about using an app password because it's not the most modern or secure method, but it is convenient, and it's appropriate for sending email from your own local Python scripts. Although I will admit that I used a secondary, development email address in the example in the video.&lt;/p&gt;

&lt;p&gt;The screen for setting up an application password looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yD1Gm0W7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fimnknjvnr3ddjs6zevz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yD1Gm0W7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fimnknjvnr3ddjs6zevz.png" alt="Image description" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I selected mail because I want to send email and gave it a custom name, in my case "Python".&lt;/p&gt;

&lt;p&gt;Now we need to configure yagmail so that it was access to your username and password in a secure way. We could simple write the username and password in the Python script, but that's not a secure practice, and it's best to cultivate good security habits from the start.&lt;/p&gt;

&lt;p&gt;The process here is to spawn a Python interpreter within the Poetry environment shell. In that shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import yagmail
&amp;gt;&amp;gt;&amp;gt; yagmail.register('sender@email.com', 'yourpassword')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will save your password to your computers keychain utility. (I tested it, and it works on mac, but will someone please try it on a PC and let me know?)&lt;/p&gt;

&lt;p&gt;There is another configuration step, which I honestly almost forgot about when I was making the video. We could specify the sender email address in the Python script, but it's more convenient, and perhaps more stylish, to do so in a &lt;code&gt;.yagmail&lt;/code&gt; file in your home directory, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~
vim .yagmail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The contents of &lt;code&gt;.yagmail&lt;/code&gt; are simply the email address to be used as the sender. Nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;Once we've done all of this setup, we can test by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in the shell of the Poetry environment in the project directory.&lt;/p&gt;

&lt;p&gt;And here's proof that the email got sent:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PTEItb5V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qkjhybkapvbwydcuogtw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PTEItb5V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qkjhybkapvbwydcuogtw.png" alt="Image description" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Thanks for reading (or watching) and see you next time, when I will talk about cron, in preparation for my video on improving sleep quality with Python.&lt;/p&gt;

</description>
      <category>python</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Learn Python From Scratch - with futurecoder</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Sat, 15 Jul 2023 14:22:50 +0000</pubDate>
      <link>https://dev.to/datadeverik/learn-python-from-scratch-with-futurecoder-3i08</link>
      <guid>https://dev.to/datadeverik/learn-python-from-scratch-with-futurecoder-3i08</guid>
      <description>&lt;p&gt;I have recently found a neat new (to me) resource for learning Python. It's called futurecoder and you can find it at &lt;a href="https://futurecoder.io"&gt;https://futurecoder.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I was interested to try it out, so I worked through the first few sections and live-streamed the result on my YouTube channel. You can see that here: &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/live/Rtjqq-UtSqg" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--js2qgwVV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/Rtjqq-UtSqg/hqdefault.jpg" height="360" class="m-0" width="480"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/live/Rtjqq-UtSqg" rel="noopener noreferrer" class="c-link"&gt;
          Learn Python From Scratch - with futurecoder - livestream - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          I'm going to teach you Python by working through the education material on futurecoder.io, an interactive course to teach people Python from scratch.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wd2tTYlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/fc8159e8/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;I liked the teaching approach, which was very interactive and encouraged the learner to try things. &lt;/p&gt;

&lt;p&gt;If you're just getting started with Python, I'd recommend checking out either the website or the archived lived-stream on my channel, to see if it's a learning resource that works for you. I'd like to hear what you think of it!&lt;/p&gt;

</description>
      <category>python</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>What do You want to see on YouTube?</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Sat, 15 Jul 2023 14:17:19 +0000</pubDate>
      <link>https://dev.to/datadeverik/what-do-you-want-to-see-on-youtube-10ip</link>
      <guid>https://dev.to/datadeverik/what-do-you-want-to-see-on-youtube-10ip</guid>
      <description>&lt;p&gt;Hello Dev community. I've recently felt renewed excitement about my YouTube Channel. I've been making a few videos, but I'd love to hear from you: what content do you want to see on YouTube? &lt;/p&gt;

&lt;p&gt;My main interests are music, programming, and data, so I mostly want to hear suggestions that touch on those areas, but if you have another area of interest, I'd like to hear about that too. &lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>motivation</category>
    </item>
    <item>
      <title>Cloud Resume Challenge: Some things I learned</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Thu, 16 Feb 2023 21:24:58 +0000</pubDate>
      <link>https://dev.to/datadeverik/cloud-resume-challenge-some-things-i-learned-51j7</link>
      <guid>https://dev.to/datadeverik/cloud-resume-challenge-some-things-i-learned-51j7</guid>
      <description>&lt;p&gt;I just completed v1 of my cloud resume challenge. It's available at &lt;a href="https://erikresume.com" rel="noopener noreferrer"&gt;erikresume.com&lt;/a&gt;. I say v1 because there are some things that could be improved, and I may do some add-ons to the project as well.&lt;/p&gt;

&lt;p&gt;But what is the cloud resume challenge?&lt;/p&gt;

&lt;p&gt;The cloud resume challenge is project brief developed by Forrest Brazeal, which aims to prepare you for a job in the cloud. It requires using a variety of clouding services and stitching them together into one cohesive working website.&lt;/p&gt;

&lt;p&gt;My resume website has a straightforward HTML rendering of my resume, as well as a visits number at the bottom of the page. That visits number hides a lot of complexity, as I will allude to below.&lt;/p&gt;

&lt;p&gt;I went into the project a few days ago feeling pretty confident: I had started on the project before, and I felt strong in my Python programming knowledge. But there were some things that tripped me up. Here's a brief description of some of those things, as well as what I learned.&lt;/p&gt;

&lt;p&gt;First, CORS, or Cross-Origin Resource Sharing. I ran into this when I tried to let my website - &lt;code&gt;erikresume.com&lt;/code&gt; - call an API - at something like &lt;code&gt;abcdef8.execute-api.us-east-2.amazonaws.com/prod/visits&lt;/code&gt; - to get and increment the count of visits to the website. At first the API response was blocked by the same-origin policy, so I had to add particular headers to the API response to signal that it should be allowed through, even though it came from a different origin.&lt;/p&gt;

&lt;p&gt;Second, I gained a much clearer understanding of how S3, CloudFront, and Route 53 fit together to serve a web page. Very briefly, S3 hold the content, CloudFront manages global distribution, and Route 53 matches your domain name (in my case erikresume.com) to the CloudFront distribution.&lt;/p&gt;

&lt;p&gt;Third, I learned how API Gateway and Lambda functions fit together to expose a web URL - something like abcdef8.execute-api.us-east-2.amazonaws.com/prod/visits - and connect it to a Lambda function that executes coode you define. You can see &lt;a href="https://github.com/ekand/cloud-resume-backend/blob/v1.0.0/lambda/post_visit_counts_handler.py" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt; the code for my Lambda Function.&lt;/p&gt;

&lt;p&gt;Finally, I got more comfortable with Cloud Development Kit (CDK). I had seen this previously in a job, but here I got more practice with it. CDK is available in a number of languages, but I chose TypeScript, because that's the native language of the project.&lt;/p&gt;

&lt;p&gt;With CDK you get to write your infractructure-as-code in a fully expressive programming language, and you get smart completions and other help in your IDE. I find it much more useable than YAML templates.&lt;/p&gt;

&lt;p&gt;Here's an example of my code that defines an S3 bucket to hold the front end material of the website.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;assetsBucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CloudResumeFrontendBucket&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;websiteIndexDocument&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;index.html&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;publicReadAccess&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also see this code in context &lt;a href="https://github.com/ekand/cloud-resume-frontend/blob/ec2c7095c6f107737b28ef2f2b1ff0ff72016f6c/lib/cloud-resume-frontend-stack.ts#L15-L18" rel="noopener noreferrer"&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since &lt;code&gt;assetsBucket&lt;/code&gt; is a &lt;code&gt;const&lt;/code&gt;, we can access it later in the TypeScript code, for example to link the bucket to a CloudFront distribution. I found this way of doing things much more natural than clicking around in the AWS management console.&lt;/p&gt;

&lt;p&gt;One other thing I learned was how to use AWS Organization Formation to set up multiple account. I also set up a pipeline using the AWS services CodeCommit and CodePipeline, so that all I need to do to add additional AWS accounts is add some lines of code to the configuration and push the code to CodeCommit. I can also disable accounts in this manner.&lt;/p&gt;

&lt;p&gt;In conclusion, I learned a lot through this challenge. I hope you enjoyed reading about it. Maybe you'll even consider trying the challenge yourself. Feel free to reach out in the comments if you have questions or suggestions.&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>A Video Solution to "Counting Sheep...", a Codewars Kata</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Thu, 05 May 2022 17:06:04 +0000</pubDate>
      <link>https://dev.to/datadeverik/a-video-solution-to-counting-sheep-a-codewars-kata-2m08</link>
      <guid>https://dev.to/datadeverik/a-video-solution-to-counting-sheep-a-codewars-kata-2m08</guid>
      <description>&lt;p&gt;I'm back at it again! Here's another video solution to a Codewars Kata.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/_pyyQZNz7j0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>python</category>
      <category>codewars</category>
    </item>
    <item>
      <title>A Video Solution to 'Mumbling', a Codewars Kata</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Fri, 23 Jul 2021 16:29:56 +0000</pubDate>
      <link>https://dev.to/datadeverik/a-video-solution-to-mumbling-a-codewars-kata-3l08</link>
      <guid>https://dev.to/datadeverik/a-video-solution-to-mumbling-a-codewars-kata-3l08</guid>
      <description>&lt;p&gt;I'm back at it! Here's another video solution to a Codewars Kata.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/u9t7H_jI1Gc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codewars</category>
      <category>python</category>
    </item>
    <item>
      <title>Live Coding (music) - The Sonic Pi Tutorial, section 1.1</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Mon, 19 Jul 2021 22:41:42 +0000</pubDate>
      <link>https://dev.to/datadeverik/live-coding-music-the-sonic-pi-tutorial-section-1-1-4f7b</link>
      <guid>https://dev.to/datadeverik/live-coding-music-the-sonic-pi-tutorial-section-1-1-4f7b</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/AGm8uzCXyBI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Hi. Here's the fruit of my newest project: I'm working through the tutorial that ships with Sonic Pi, and publishing the result to youtube. Enjoy!&lt;/p&gt;

</description>
      <category>music</category>
      <category>sonicpi</category>
    </item>
    <item>
      <title>I just discovered Sonic Pi</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Mon, 19 Jul 2021 22:37:56 +0000</pubDate>
      <link>https://dev.to/datadeverik/i-just-discovered-sonic-pi-l6b</link>
      <guid>https://dev.to/datadeverik/i-just-discovered-sonic-pi-l6b</guid>
      <description>&lt;p&gt;Sonic Pi is "The Live Coding Music Synth for Everyone". It lets your make music through code. I'm so excited about this that I'll be working all the way through the tutorial which ships with the software. And to keep myself engaged, I'm going to publish the process on Youtube. You can find the playlist, which I should be updating fairly regularly, &lt;a href="https://www.youtube.com/playlist?list=PLK3zM7Pklmc2K6i4Oke68C1RWMrU7Zj3q"&gt;right here&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>music</category>
      <category>sonicpi</category>
    </item>
    <item>
      <title>Video Solution(s) to List Filtering - a Codewars Kata</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Thu, 04 Mar 2021 13:55:13 +0000</pubDate>
      <link>https://dev.to/datadeverik/video-solution-to-list-filtering-a-codewars-kata-1jm0</link>
      <guid>https://dev.to/datadeverik/video-solution-to-list-filtering-a-codewars-kata-1jm0</guid>
      <description>&lt;p&gt;I'm trying a new thing (again) here: making videos for YouTube where I walk through the solution to a kata (coding challenge) on Codewars. Here's the link:&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/AWloXsb6qCE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>codewars</category>
    </item>
    <item>
      <title>Uber Surge Predicted with Machine Learning | Chicago</title>
      <dc:creator>Erik Anderson</dc:creator>
      <pubDate>Wed, 12 Feb 2020 18:31:15 +0000</pubDate>
      <link>https://dev.to/datadeverik/uber-surge-predicted-with-machine-learning-chicago-6kl</link>
      <guid>https://dev.to/datadeverik/uber-surge-predicted-with-machine-learning-chicago-6kl</guid>
      <description>&lt;p&gt;&lt;a href="https://youtu.be/M016woop34c"&gt;https://youtu.be/M016woop34c&lt;/a&gt;&lt;br&gt;
For starters, there's a youtube video, or you can just read below, if that's more your speed.&lt;/p&gt;
&lt;h1&gt;
  
  
  Rideshare Helper
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/ekand/rideshare_helper"&gt;https://github.com/ekand/rideshare_helper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What can rideshare drivers in Chicago do to earn more money?  &lt;/p&gt;

&lt;p&gt;This is a new thing: They can use this data science project with its machine learning model which predicts when and where high demand pricing will occur. &lt;/p&gt;

&lt;p&gt;High demand pricing goes by different names at different companies: At Uber, it is called Surge Pricing, at Lyft, it's called Prime Time Pricing.&lt;/p&gt;

&lt;p&gt;For this project, I used data from the city of Chicago: A dataset of rideshare trips (&lt;a href="https://data.cityofchicago.org/Transportation/Transportation-Network-Providers-Trips/m6dm-c72p"&gt;https://data.cityofchicago.org/Transportation/Transportation-Network-Providers-Trips/m6dm-c72p&lt;/a&gt;), a data set of percapita income, among other health factors (&lt;a href="https://data.cityofchicago.org/Health-Human-Services/Per-Capita-Income/r6ad-wvtk"&gt;https://data.cityofchicago.org/Health-Human-Services/Per-Capita-Income/r6ad-wvtk&lt;/a&gt;), and data set with geographical outlines for the 77 community areas in Chicago (&lt;a href="https://data.cityofchicago.org/Facilities-Geographic-Boundaries/Boundaries-Community-Areas-current-/cauq-8yn6"&gt;https://data.cityofchicago.org/Facilities-Geographic-Boundaries/Boundaries-Community-Areas-current-/cauq-8yn6&lt;/a&gt;). The rideshare dataset contained about 129 million trips over a bit more than a year, but I focused on one arbitrarily selected day to do my analysis. This greatly simplified things and allowed me to perform the analysis on my laptop.&lt;/p&gt;

&lt;p&gt;The techniques used were Linear Regression for feature engineering and Random Forest Classification to predict whether a given trip will be under surge pricing.&lt;/p&gt;

&lt;p&gt;The Random Forest Classifier Model performed passably well: It had 25% precision, although the recall was quite low. However, this is adequate for my use case: If I can tell drivers "go to this place at this time and you've got a 25% chance of catching a surge," I think that's valuable.&lt;/p&gt;

&lt;p&gt;The model also idendified important features: proximity to the loop, per capita income in the community area where the trip starts, and whether the trip start between 4pm and 8pm. In other words, high demand pricing is more likely to occur downtown &lt;br&gt;
This is a nice sanity check to ensure the model makes sense.&lt;/p&gt;

&lt;p&gt;In the PDF version of the presentation, you can see some visualizations of the model's predictions. There are also live, interactive visuzlization here (&lt;a href="https://public.tableau.com/profile/erik.kristofer.anderson#!/vizhome/RideshareHighDemandPricingPredictions/predict_morn_eve?publish=yes"&gt;https://public.tableau.com/profile/erik.kristofer.anderson#!/vizhome/RideshareHighDemandPricingPredictions/predict_morn_eve?publish=yes&lt;/a&gt;) and here (&lt;a href="https://public.tableau.com/profile/erik.kristofer.anderson#!/vizhome/RideshareHighDemandPricingPredictions/true_and_pred_dashboard?publish=yes"&gt;https://public.tableau.com/profile/erik.kristofer.anderson#!/vizhome/RideshareHighDemandPricingPredictions/true_and_pred_dashboard?publish=yes&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The jupyter notebooks contain most of the code, and the detailed analysis.&lt;/p&gt;

&lt;p&gt;The organization of the project is as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;------------
.
├── data              -----&amp;gt; contains various data files, organized and excluded from version control 
│   ├── external
│   ├── interim
│   ├── pickles
│   ├── processed
│   └── raw
├── docs             -----&amp;gt; documentation (currently empty)
├── models           -----&amp;gt; pickled models
├── notebooks        -----&amp;gt; jupyter notebooks with main code and explanation
├── references       -----&amp;gt; external reference, if needed
├── reports          -----&amp;gt; presentation files
│   ├── external_images
│   ├── figures
│   └── videos
└── src               -----&amp;gt; Python scripts, packaged as modules and imported using `pip install -e .`
    ├── data_prep
    ├── features
    ├── models
    ├── pickle
    ├── surge
    └── visualization

--------
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Project based on the cookiecutter data science project template.&lt;br&gt;&lt;br&gt;
"&lt;a href="https://drivendata.github.io/cookiecutter-data-science/"&gt;https://drivendata.github.io/cookiecutter-data-science/&lt;/a&gt;"&lt;br&gt;&lt;br&gt;
&lt;code&gt;#cookiecutterdatascience&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Hope you enjoyed reading this and please post below if you have questions (or if you just liked it, or even if you didnt'; I just love comments).&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
