<?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>Forem: Steve Martinelli</title>
    <description>The latest articles on Forem by Steve Martinelli (@stevemar).</description>
    <link>https://forem.com/stevemar</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%2F485420%2Feb96c12c-6cba-483c-91f7-9e929549f514.jpeg</url>
      <title>Forem: Steve Martinelli</title>
      <link>https://forem.com/stevemar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/stevemar"/>
    <language>en</language>
    <item>
      <title>5 Features I Like About Material for MkDocs</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Sat, 28 Nov 2020 06:46:02 +0000</pubDate>
      <link>https://forem.com/stevemar/5-features-i-like-about-material-for-mkdocs-4ig7</link>
      <guid>https://forem.com/stevemar/5-features-i-like-about-material-for-mkdocs-4ig7</guid>
      <description>&lt;p&gt;Recently, I spent a few days experimenting with &lt;a href="https://squidfunk.github.io/mkdocs-material/"&gt;Material for MkDocs&lt;/a&gt;. In short, I'm impressed with the project and hope it continues to gain traction. It does, as the project tag line suggests...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Technical documentation that just works&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this blog post, in no particular order, are five things I like about the Material for MkDocs project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you're interested in seeing what I built using Material for MkDocs, check out &lt;a href="https://stevemar.github.io/minimal-workshop-mkdocs/"&gt;https://stevemar.github.io/minimal-workshop-mkdocs/&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  About Material for MkDocs
&lt;/h2&gt;

&lt;p&gt;If you're not familiar with Material for MkDocs, it's one of many options to host your open source technical documentation. If you're familiar with GitBook, it's like that. It, like most other projects with similar goals, relies on the documentation being written in Markdown.&lt;/p&gt;

&lt;p&gt;It has &lt;a href="https://squidfunk.github.io/mkdocs-material/"&gt;wonderful documentation&lt;/a&gt;, a very well maintained and &lt;a href="https://github.com/squidfunk/mkdocs-material"&gt;active repo&lt;/a&gt;, and boasts an impressive list of users, like &lt;a href="https://aws.github.io/copilot-cli/"&gt;AWS&lt;/a&gt; or &lt;a href="https://kops.sigs.k8s.io/"&gt;Kubernetes&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Fantastic looking graphical
&lt;/h2&gt;

&lt;p&gt;The first thing I'll mention is that Material for MkDocs supports a variety of markdown plugins out of the box, enabling it to have some great user interfaces for your static site. Here are my three favorites:&lt;/p&gt;

&lt;h3&gt;
  
  
  Admonitions
&lt;/h3&gt;

&lt;p&gt;Admonitions are available and come with 12 different display settings. Depending on what label you use in your admonition you get a particular color and icon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DjejpPv5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xigqedhv38wlyggb3354.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DjejpPv5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xigqedhv38wlyggb3354.png" alt="admonitions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tabbed content
&lt;/h3&gt;

&lt;p&gt;Another feature I like is that you can display tabbed content on your page. For instance, if you had some commands that a user should run depending on an operating system (Windows, Linux, or Mac), this would work perfectly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MD4PxYUb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r3sgb4vym2nq5h0y0945.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MD4PxYUb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/r3sgb4vym2nq5h0y0945.png" alt="tabs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Buttons
&lt;/h3&gt;

&lt;p&gt;This probably shouldn't be a big deal, but adding a simple button to a static site is usually one of those steps that is harder than it should be. With Material for MkDocs it's very simple.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c6Nj19qk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/637f36rwswkweyl51mgx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c6Nj19qk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/637f36rwswkweyl51mgx.png" alt="buttons"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Social media footers
&lt;/h2&gt;

&lt;p&gt;The next neat feature lies in the footer. Adding all brand icons is very easy and done in minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rBTk0HKx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/aatmxn5u0h9h1ipwlgds.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rBTk0HKx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/aatmxn5u0h9h1ipwlgds.png" alt="social"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A full list of supported brand icons is in the project &lt;a href="https://github.com/squidfunk/mkdocs-material/tree/master/material/.icons/fontawesome/brands"&gt;repo&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. GitHub Actions integration
&lt;/h2&gt;

&lt;p&gt;I'm a fan of GitHub Actions (see my previous posts &lt;a href="https://www.stevemar.net/github-actions-rm-images/"&gt;"Removing unused images"&lt;/a&gt; and &lt;a href="https://www.stevemar.net/github-actions-with-iks/"&gt;"Deploying to IBM Cloud Kubernetes"&lt;/a&gt;). So seeing that Material for MkDocs deplyed to GitHub pages via GitHub Actions got me excited. You just need to drop this code in the usual &lt;code&gt;.github/workflows&lt;/code&gt; path. Turn on GitHub Pages to deploy from the &lt;code&gt;gh-pages&lt;/code&gt; branch, and you're live!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ci&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-python@v2&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;python-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3.x&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pip install mkdocs-material&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mkdocs gh-deploy --force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Easy to set up
&lt;/h2&gt;

&lt;p&gt;Material for MkDocs says "get up and running in 5 minutes". And yeah, I can say that the statement is accurate.&lt;/p&gt;

&lt;p&gt;Install the package;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;mkdocs-material
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Place a config file &lt;code&gt;mkdocs.yml&lt;/code&gt; in the top level directory. Minimally, you need the contents below. And put all your markdown files in a &lt;code&gt;docs&lt;/code&gt; folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;material&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run and test the site locally with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mkdocs serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. All goverened by a single file
&lt;/h2&gt;

&lt;p&gt;As long as you don't extend the base theme, the site's style and layout is governed by a single file. Which, if you're controlling multiple repositories and looking for consistency, makes things much more manageable.&lt;/p&gt;

&lt;p&gt;Here's a snippet of what I use, check out my complete config file &lt;a href="https://github.com/stevemar/minimal-workshop-mkdocs/blob/main/mkdocs.yml"&gt;over here&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Theme&lt;/span&gt;
&lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;material&lt;/span&gt;
  &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;navigation.tabs&lt;/span&gt;

&lt;span class="c1"&gt;# Project information&lt;/span&gt;
&lt;span class="na"&gt;site_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Minimal Workshop&lt;/span&gt;
&lt;span class="na"&gt;site_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://stevemar.github.io/minimal-workshop-mkdocs&lt;/span&gt;
&lt;span class="na"&gt;site_author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;IBM Developer&lt;/span&gt;

&lt;span class="c1"&gt;# Repository&lt;/span&gt;
&lt;span class="na"&gt;repo_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;minimal-workshop-mkdocs&lt;/span&gt;
&lt;span class="na"&gt;repo_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/stevemar/minimal-workshop-mkdocs&lt;/span&gt;

&lt;span class="c1"&gt;# Navigation&lt;/span&gt;
&lt;span class="na"&gt;nav&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Welcome&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;About the site&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;index.md&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Workshop&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Lab 1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;workshop/lab-1.md&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Lab 2&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;workshop/lab-2.md&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;Lab 3&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;workshop/lab-3.md&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Material for MkDocs is a great project. It's maintainer, &lt;a href="https://github.com/squidfunk"&gt;Martin Donath&lt;/a&gt;, is passionate about the project and is basically it's sole maintainer. The project is entirely open source but does use the &lt;a href="https://github.com/sponsorware/docs"&gt;sponsorware&lt;/a&gt; release strategy, meaning new features are first exclusively released to sponsors. If you're interested I encourage you to check it out.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Byte-Sized Tech Tips Round-Up: Week 7 (The Vim Edition 
💻)</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Fri, 20 Nov 2020 20:15:03 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-7-the-vim-edition-2acd</link>
      <guid>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-7-the-vim-edition-2acd</guid>
      <description>&lt;p&gt;This week's round up has a special theme, it's all about &lt;a href="https://en.wikipedia.org/wiki/Vim_(text_editor)" rel="noopener noreferrer"&gt;Vim&lt;/a&gt;! At our weekly meeting someone had mentioned using Vim, which of course turned into a conversation about all the tips and tricks for using it. Let's start!&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 1: Nigel's tip
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From &lt;a href="https://www.linkedin.com/in/pnigelbrown/" rel="noopener noreferrer"&gt;Nigel&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One of my favorite modifiers in Vim is being able to modify certain commands with numbers. When I want to delete a line, I use &lt;code&gt;dd&lt;/code&gt;, but if I needed to delete three lines, I use &lt;code&gt;d3d&lt;/code&gt;. This works with several commands and I encourage you to check it out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 2: Make learning Vim fun!
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__258061"&gt;
    &lt;a href="/jritten" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F258061%2F8333b0d3-40a3-42bf-8aa7-94ba6757406b.png" alt="jritten image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/jritten"&gt;Jenna Ritten&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/jritten"&gt;Jenna left Detroit to attend Dev Bootcamp San Francisco to learn full-stack web development before joining IBM as part of the Tech Re-Entry program. She advocates for underrepresented people in tech.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 
&lt;/blockquote&gt;

&lt;p&gt;If you’re looking to learn Vim, or have dabbled a bit and want to become  a Vim Jedi, I’ve put together some fantastic resources to get you started! &lt;a href="https://vim-adventures.com/" rel="noopener noreferrer"&gt;Vim Adventures&lt;/a&gt; is a comprehensive Vim online game to teach you all things Vim. &lt;a href="http://www.vimgenius.com/" rel="noopener noreferrer"&gt;Vim Genius&lt;/a&gt; will help you flex your Vim muscle memory and build up your skills and speed. If you prefer to work through technical documentation, &lt;a href="https://learnvimscriptthehardway.stevelosh.com/" rel="noopener noreferrer"&gt;Learn Vimscript the Hard Way&lt;/a&gt; is a great resource for manually working through all things Vim. Oh, and I did I mention they’re all FREE?!? Gotta love online resources&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 3: Double Z and NERDTree
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__485420"&gt;
    &lt;a href="/stevemar" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F485420%2Feb96c12c-6cba-483c-91f7-9e929549f514.jpeg" alt="stevemar image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/stevemar"&gt;Steve Martinelli&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/stevemar"&gt;Canadian | IBMer | FOSS | Python | Kubernetes&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 
&lt;/blockquote&gt;

&lt;p&gt;I'm cheating a bit and including two tips. We've all seen a joke about being unable to quit Vim, i.e.:&lt;/p&gt;

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

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



&lt;/p&gt;

&lt;p&gt;The good news is that there's an &lt;em&gt;easy&lt;/em&gt; way! (No, really!)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Slam the &lt;code&gt;ESC&lt;/code&gt; key a bunch of times.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;Z&lt;/code&gt; twice (Double Z)&lt;/li&gt;
&lt;li&gt;You've exited Vim!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The second tip is that if you really want to impress folks with your Vim skills install the &lt;a href="https://github.com/preservim/nerdtree" rel="noopener noreferrer"&gt;NERDTree&lt;/a&gt; plug-in. &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%2Fraw.githubusercontent.com%2Fpreservim%2Fnerdtree%2Fmaster%2Fscreenshot.png" 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%2Fraw.githubusercontent.com%2Fpreservim%2Fnerdtree%2Fmaster%2Fscreenshot.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo credit to the folks at NERDTree&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;NERDTree will add a file system explorer for the Vim editor, allowing you to switch between editing multiple files without ever having to leave Vim.&lt;/p&gt;

</description>
      <category>vim</category>
      <category>bash</category>
      <category>linux</category>
    </item>
    <item>
      <title>Byte-Sized Tech Tips Round-Up: Week 6</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Sat, 14 Nov 2020 05:13:15 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-6-2c5g</link>
      <guid>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-6-2c5g</guid>
      <description>&lt;h2&gt;
  
  
  Tip 1: Use &lt;code&gt;skaffold&lt;/code&gt; to test your code quickly
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__122556"&gt;
  
    .ltag__user__id__122556 .follow-action-button {
      background-color: #010C1F !important;
      color: #FFFFFF !important;
      border-color: #010C1F !important;
    }
  
    &lt;a href="/lidderupk" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AaJIt_K4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--UerZJ0zY--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/122556/5c5d8cbe-b4c5-48ef-9c5d-51095ba9bec9.jpg" alt="lidderupk image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/lidderupk"&gt;Upkar Lidder&lt;/a&gt;
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/lidderupk"&gt;Upkar Lidder is a Full Stack Developer and Data Wrangler with a decade of development experience in a variety of roles. Educated in Canada and currently residing in the USA. &amp;lt;3 Python and JS!&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;

&lt;p&gt;Want to quickly test your Kubernetes service in a cluster, but don’t have the CI/CD set up or don't want to wait for pipelines to deploy your code? I use &lt;a href="https://skaffold.dev/"&gt;&lt;code&gt;skaffold&lt;/code&gt;&lt;/a&gt; when developing locally while deploying to a cluster. It's easy to use in just a few steps!&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Install skaffold
&lt;/h4&gt;

&lt;p&gt;Get it from &lt;a href="https://skaffold.dev/docs/install/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Create a &lt;code&gt;skaffold.yaml&lt;/code&gt; file.
&lt;/h4&gt;

&lt;p&gt;I use something called &lt;a href="https://skaffold.dev/docs/environment/profiles/"&gt;&lt;code&gt;profiles&lt;/code&gt;&lt;/a&gt; for testing, integration and production environments. Well maybe not production. That should always be CI/CD and maybe even a manual push (up for debate). Here is an example skaffold file with helm. You don’t have to use helm in order to use skaffold:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;skaffold/v2beta6&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Config&lt;/span&gt;
&lt;span class="na"&gt;profiles&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;activation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;artifacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;namespace&amp;gt;/&amp;lt;cluster&amp;gt;/rulesdecision&lt;/span&gt;
    &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;helm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;releases&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rulesdecision&lt;/span&gt;
          &lt;span class="na"&gt;chartPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;chart/rulesdecision&lt;/span&gt;
          &lt;span class="na"&gt;artifactOverrides&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;rulesdecision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;repository&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;namespace&amp;gt;/&amp;lt;cluster&amp;gt;/rulesdecision&lt;/span&gt;
          &lt;span class="na"&gt;overrides&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;rulesdecision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  3. Run &lt;code&gt;skaffold -p deploy&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;That’s it! Skaffold will automatically create a new image, load it to your repository and deploy the build on the cluster. It then refreshes the deployment with a new image when you make changes and save. The whole process is like deploying locally, but you are deploying to a cluster. How cool is that! Big caveat is that the deployment artifact will be removed when you quit the &lt;code&gt;skaffold&lt;/code&gt; command.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tip 2: Give your Discord bot a &lt;em&gt;voice&lt;/em&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__126043"&gt;
  
    .ltag__user__id__126043 .follow-action-button {
      background-color: #0030b3 !important;
      color: #ffffff !important;
      border-color: #0030b3 !important;
    }
  
    &lt;a href="/blumareks" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EqfQaDKV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--FLLbrzhm--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/126043/c2dd5bde-3994-4722-beef-eb64212256fc.jpeg" alt="blumareks image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/blumareks"&gt;Marek Sadowski&lt;/a&gt;
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/blumareks"&gt;an entrepreneur hijacked by an enterprise to hack robots with AI - and I published a book on Serverless Swift&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;This week I was able to configure a bot with a voice channel on a Discord server.&lt;/p&gt;

&lt;p&gt;You start by installing &lt;a href="https://www.npmjs.com/package/discord.js"&gt;&lt;code&gt;discord.js&lt;/code&gt;&lt;/a&gt; with &lt;code&gt;npm&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;discord.js @discordjs/opus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The next step is to create an &lt;code&gt;index.js&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Discord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;discord.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&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;Discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;YOUR-BOT-TOKEN&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ready&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="err"&gt;Logged in as &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;!&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Join the same voice channel of the author of the message&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;member&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;voice&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ping&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dispatcher&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;play&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://cdn.glitch.com/60a14f49-0846-4bad-b84a-e5f018c2130d%2Fmsn_alert.mp3?1506640405402&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// you can change the volume like this:&lt;/span&gt;
      &lt;span class="c1"&gt;// connection.play('https://...', { volume: 0.1 });&lt;/span&gt;
      &lt;span class="nx"&gt;dispatcher&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;start&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;audio is now playing!&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="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;error:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Always remember to handle errors appropriately!&lt;/span&gt;
&lt;span class="c1"&gt;//dispatcher.destroy();&lt;/span&gt;
&lt;span class="c1"&gt;//Leave voice channel&lt;/span&gt;
&lt;span class="c1"&gt;//connection.disconnect();&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And after creating this file simply type:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now just join a Discord voice channel and write &lt;code&gt;ping&lt;/code&gt; in one of the text channels and your bot will play a nice welcome tune.&lt;/p&gt;

&lt;p&gt;If you want to learn more about bots on Discord see my &lt;a href="https://medium.com/voice-tech-podcast/yeah-a-discord-ai-powered-bot-baby-d9cb73b4775d"&gt;blog&lt;/a&gt; and watch the &lt;a href="https://www.crowdcast.io/e/discord-chatbot-with-ibm-3"&gt;webinar recording&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Tip 3: New IBM DataStage blogs and labs
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__485420"&gt;
  
    .ltag__user__id__485420 .follow-action-button {
      background-color: #19063A !important;
      color: #dce9f3 !important;
      border-color: #19063A !important;
    }
  
    &lt;a href="/stevemar" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PTbEga5J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--OvE8jj8A--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/485420/eb96c12c-6cba-483c-91f7-9e929549f514.jpeg" alt="stevemar image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/stevemar"&gt;Steve Martinelli&lt;/a&gt;
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/stevemar"&gt;Canadian | IBMer | FOSS | Python | Kubernetes&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;This week and last I've had to dig into the product "IBM DataStage" for a workshop with a client. I used to depend on existing material and a VM based image to get an environment up and running. I decided to learn how to install the product myself and create some supplemental material.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.stevemar.net/installing-datastage/"&gt;Blog about installing DataStage manually&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.stevemar.net/datastage-playbook/"&gt;Blog about using Ansible to install DataStage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/IBM/datastage-standalone-workshop/blob/master/workshop/lab-rest/README.md"&gt;Lab about reading JSON data from a REST call&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/IBM/datastage-standalone-workshop/blob/master/workshop/lab-git/README.md"&gt;Lab about configuring a Git server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Byte-Sized Tech Tips Round-Up: Week 5</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Fri, 06 Nov 2020 18:31:30 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-5-2824</link>
      <guid>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-5-2824</guid>
      <description>&lt;h2&gt;
  
  
  Tip 1: Level up your Terminal with PowerLevel10k
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__173296"&gt;
    &lt;a href="/moficodes" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F173296%2Fff1c7da5-b8e7-47d6-9606-e1557494c6a5.jpeg" alt="moficodes image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/moficodes"&gt;Mofi Rahman&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/moficodes"&gt;Go Developer, Does Container-y stuff, Collects Stickers (in no particular order)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;

&lt;p&gt;As developers we spend a big chunk of our day in the terminal. So making it visually appealing is not a bad idea. There are a ton of ways to customize the look and feel of the terminal UI and you can get into this rabbit hole of custom bash scripts. &lt;/p&gt;

&lt;p&gt;If you want a quick and easy way to make your terminal look all fancy like, then look no further than &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;PowerLevel10k&lt;/a&gt;. In less than 10 minutes you can get your terminal to look from this (left) to this (right)&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%2Fi.ibb.co%2FyWZYjkM%2Fscreen.png" 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%2Fi.ibb.co%2FyWZYjkM%2Fscreen.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tip 2: Kubernetes namespace management made &lt;em&gt;EASY&lt;/em&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__"&gt;
    &lt;div class="ltag__user__pic"&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%2F99mvlsfu5tfj9m7ku25d.png" alt="[deleted user] image"&gt;
    &lt;/div&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;[Deleted User]&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 
&lt;/blockquote&gt;

&lt;p&gt;I use namespaces in Kubernetes for testing out deployments and services. I am able to try things out in the test namespace without affecting anything in the integration namespace. The goal is to always have a working solution in the integration namespace. There are a few ways to switch between the namespaces.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://kubernetes.io/docs/tasks/administer-cluster/namespaces-walkthrough" rel="noopener noreferrer"&gt;Kubernetes documentation&lt;/a&gt; describes a good way to do this by creating two contexts, one for test and another for integration. The user would then use the use-context command as follows&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl config use-context &amp;lt;context-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Another quick way to set the current namespace is by using the &lt;a href="https://github.com/ahmetb/kubectx" rel="noopener noreferrer"&gt;&lt;code&gt;kubectx&lt;/code&gt;&lt;/a&gt; and &lt;code&gt;kubens&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let's take a look. Here I am currently in the default namespace:&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="nv"&gt;$ &lt;/span&gt;kubectl get po
NAME                                READY   STATUS    RESTARTS   AGE
mariadb34-6957-47-master-0          1/1     Running   11         49d
mariadb34-6957-47-slave-0           1/1     Running   7          49d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now use &lt;code&gt;kubens&lt;/code&gt; to switch to the test namespace:&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="nv"&gt;$ &lt;/span&gt;kubens &lt;span class="nb"&gt;test
&lt;/span&gt;Context &lt;span class="s2"&gt;"Prometeo-Kubernetes/bs8vr7fl0civct1kgnpg"&lt;/span&gt; modified.
Active namespace is &lt;span class="s2"&gt;"test"&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now let’s list the pods again:&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="nv"&gt;$ &lt;/span&gt;kubectl get po
NAME                            READY   STATUS    RESTARTS   AGE
hello-server-5bfd595c65-ct8n9   1/1     Running   0          2d21h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It's just that simple! &lt;/p&gt;
&lt;h2&gt;
  
  
  Tip 3: Generate a Jupyter Notebook with AutoAI
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__258061"&gt;
    &lt;a href="/jritten" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F258061%2F8333b0d3-40a3-42bf-8aa7-94ba6757406b.png" alt="jritten image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/jritten"&gt;Jenna Ritten&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/jritten"&gt;Jenna left Detroit to attend Dev Bootcamp San Francisco to learn full-stack web development before joining IBM as part of the Tech Re-Entry program. She advocates for underrepresented people in tech.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;This week I discovered a beta feature to save your AutoAI data model on IBM's data science platform. IBM's AutoAI experiment feature, which generates multiple models with a few clicks based on your data set, will now generate a Jupyter Notebook automatically! You can then use the AutoAI experiment results in a notebook to visualize and read your data to test, deploy and score a model! &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Generating models with AutoAI&lt;/em&gt;&lt;br&gt;
&lt;a href="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%2Fi%2Fg57btukprg5aog5dlvfb.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg57btukprg5aog5dlvfb.png" alt="Screen Shot 2020-11-04 at 2.29.19 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Generating a notebook with AutoAI&lt;/em&gt;&lt;br&gt;
&lt;a href="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%2Fi%2Fbrv95cq5nhnzjbxbztn7.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbrv95cq5nhnzjbxbztn7.png" alt="Screen Shot 2020-11-04 at 2.30.07 PM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read more about &lt;a href="https://www.ibm.com/ca-en/cloud/watson-studio/autoai" rel="noopener noreferrer"&gt;AutoAI&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>jupyter</category>
    </item>
    <item>
      <title>Spooky Byte-Sized Tech Tips Round-Up: Week 4 (Halloween Edition 🎃)</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Sat, 31 Oct 2020 02:27:45 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/spooky-byte-sized-tech-tips-round-up-week-4-56an</link>
      <guid>https://forem.com/ibmdeveloper/spooky-byte-sized-tech-tips-round-up-week-4-56an</guid>
      <description>&lt;h2&gt;
  
  
  Tip 1: Make your Bootstrap webpage mobile friendly: Trick or Treat! 👻
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__485420"&gt;
    &lt;a href="/stevemar" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F485420%2Feb96c12c-6cba-483c-91f7-9e929549f514.jpeg" alt="stevemar image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/stevemar"&gt;Steve Martinelli&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/stevemar"&gt;Canadian | IBMer | FOSS | Python | Kubernetes&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;

&lt;p&gt;A spooky little project that was made in an hour for my son. Check it out in GIF form below. It's just some HTML and Javascript. Nothing fancy as I wanted it to be served on GitHub Pages. Click on a button to set the image source and visibility. &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;Bootstrap&lt;/a&gt; was used so I could just pull in a decent looking theme easily.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In GIF form&lt;/em&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwp5h04ck8ern3roxn2de.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwp5h04ck8ern3roxn2de.gif" alt="Trick or Treat GIF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In interactive Glitch form&lt;/em&gt;&lt;/p&gt;


&lt;div class="glitch-embed-wrap"&gt;
  &lt;iframe src="https://glitch.com/embed/#!/embed/stevemar-trick-or-treat?previewSize=100&amp;amp;path=index.html" alt="stevemar-trick-or-treat on glitch"&gt;&lt;/iframe&gt;
&lt;/div&gt;


&lt;p&gt;One thing worth noting is that I learned how to make webpages that use Bootstrap more mobile friendly by adding this line to the header.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  HTML body
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar navbar-default"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container-fluid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"navbar-brand"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://github.com/stevemar/trick-or-treat"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;GitHub Repo&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container-fluid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"jumbotron"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Trick or Treat&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Click on a button for a spooky surprise 🎃 ...&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container-fluid"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"image"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding: 10px; height: 300px; visibility: hidden"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container-fluid"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"div_button"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-warning btn-lg"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;'change_image("monster")'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Trick!&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary btn-lg"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;'change_image("candy")'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Treat!&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Javascript
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;change_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file_prefix&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;image_src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;images/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;file_prefix&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;image_src&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;visibility&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;visible&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Read more about the project in the &lt;a href="https://stevemar.github.io/trick-or-treat" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tip 2: A scary case for &lt;code&gt;trash-cli&lt;/code&gt; 😱
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__173296"&gt;
    &lt;a href="/moficodes" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F173296%2Fff1c7da5-b8e7-47d6-9606-e1557494c6a5.jpeg" alt="moficodes image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/moficodes"&gt;Mofi Rahman&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/moficodes"&gt;Go Developer, Does Container-y stuff, Collects Stickers (in no particular order)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;Imagine it is Friday, 5:00 PM. You are ready to call it a day and head home. You just want delete some of the builds you did so you delete the &lt;code&gt;bin&lt;/code&gt; folder. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please for the love of all things good, do not run this&lt;/em&gt;&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;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /bin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Oh no! you have deleted the &lt;code&gt;bin&lt;/code&gt; folder from your root directory!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If that is something you are scared of, you can make use of this tool. &lt;a href="https://github.com/andreafrancia/trash-cli" rel="noopener noreferrer"&gt;trash-cli&lt;/a&gt; is an &lt;code&gt;rm&lt;/code&gt; replacement for your linux environment. You can alias &lt;code&gt;trash-cli&lt;/code&gt; to &lt;code&gt;rm&lt;/code&gt; and never have to worry about accidentally deleting everything off your computer.&lt;/p&gt;

&lt;p&gt;Read more about &lt;a href="https://github.com/andreafrancia/trash-cli" rel="noopener noreferrer"&gt;trash-cli&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Tip 3: Use the &lt;code&gt;watch&lt;/code&gt; command to monitor your Kubernetes pods
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__"&gt;
    &lt;div class="ltag__user__pic"&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%2F99mvlsfu5tfj9m7ku25d.png" alt="[deleted user] image"&gt;
    &lt;/div&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;[Deleted User]&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;One very useful command when starting with kubernetes is &lt;code&gt;kubectl get po&lt;/code&gt;. The problem is you have to enter it over and over again when you get want to see the pod status. Fear not, there is a handy &lt;code&gt;--watch&lt;/code&gt; flag you can pass in and this keeps the command runnings and gives you any updates. While this is an improvement, you can quickly get overwhelmed with pod change if you have a lot of pods as every change is shown as a new line. Consider this simple deployment creation using a public image:&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="nv"&gt;$ &lt;/span&gt;kubectl create deployment hello-server &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gcr.io/google-samples/hello-app:1.0 &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nb"&gt;test
&lt;/span&gt;deployment.apps/hello-server created
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s check on this single pod using the &lt;code&gt;--watch&lt;/code&gt; flag&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get po &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;--watch&lt;/span&gt;
NAME                            READY   STATUS    RESTARTS   AGE
hello-server-5bfd595c65-pzpkz   0/1     Pending   0          0s
hello-server-5bfd595c65-pzpkz   0/1     Pending   0          0s
hello-server-5bfd595c65-pzpkz   0/1     ContainerCreating   0          0s
hello-server-5bfd595c65-pzpkz   1/1     Running             0          3s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four lines just for this single pod! Imagine working with a namespace with a dozen pods. There are ways to ask for a single pod using labelling or adding grep after the command, but mostly people just ask for everything. Specially if you don’t know the details of the pod. To work around this verbosity of the &lt;code&gt;--watch&lt;/code&gt; flag, I use the &lt;a href="https://formulae.brew.sh/formula/watch" rel="noopener noreferrer"&gt;&lt;code&gt;watch&lt;/code&gt;&lt;/a&gt; program. The &lt;code&gt;watch&lt;/code&gt; command runs repeatedly and displays the results in a friendly manner.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Every 2.0s: kubectl get po &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nb"&gt;test                 &lt;/span&gt;Upkars-MacBook-Pro.local: Fri Oct 30 17:06:44 2020
NAME                            READY   STATUS    RESTARTS   AGE
hello-server-5bfd595c65-pzpkz   1/1     Running   0          5m7s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s delete the deployment using the &lt;code&gt;kubectl delete deploy&lt;/code&gt; command. The following shows the progress of the watch screen&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Every 2.0s: kubectl get po &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nb"&gt;test                 &lt;/span&gt;Upkars-MacBook-Pro.local: Fri Oct 30 17:07:56 2020
NAME                            READY   STATUS    RESTARTS   AGE
hello-server-5bfd595c65-pzpkz   1/1     Running   0          6m20s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Every 2.0s: kubectl get po &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nb"&gt;test                 &lt;/span&gt;Upkars-MacBook-Pro.local: Fri Oct 30 17:08:30 2020
NAME                            READY   STATUS        RESTARTS   AGE
hello-server-5bfd595c65-pzpkz   0/1     Terminating   0          6m53s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Every 2.0s: kubectl get po &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nb"&gt;test                 &lt;/span&gt;Upkars-MacBook-Pro.local: Fri Oct 30 17:08:40 2020
No resources found &lt;span class="k"&gt;in &lt;/span&gt;&lt;span class="nb"&gt;test &lt;/span&gt;namespace.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pretty cool eh!  You can install &lt;a href="https://formulae.brew.sh/formula/watch" rel="noopener noreferrer"&gt;&lt;code&gt;watch&lt;/code&gt;&lt;/a&gt; using &lt;code&gt;brew&lt;/code&gt; and other package managers.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Byte-Sized Tech Tips Round-Up: Week 3</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Fri, 23 Oct 2020 20:32:22 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-3-4b22</link>
      <guid>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-3-4b22</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__126043"&gt;
    &lt;a href="/blumareks" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F126043%2Fc2dd5bde-3994-4722-beef-eb64212256fc.jpeg" alt="blumareks image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/blumareks"&gt;Marek Sadowski&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/blumareks"&gt;an entrepreneur hijacked by an enterprise to hack robots with AI - and I published a book on Serverless Swift&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;

&lt;p&gt;When I have started to develop a chatbot for Discord, I realized that everybody is using Node installed in their own environments. I was aiming at running a bot right away in the cloud. Instead of running your bot "natively" in your system using &lt;code&gt;node&lt;/code&gt;, I created a Docker container that handles it all for me.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;index.js&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Discord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;discord.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&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;Discord&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ready&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  
   &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Logged in as ${client.user.tag}!&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="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ping&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="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pong!&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="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;package.json&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"discord.js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^12.3.1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;Dockerfile&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:10&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; NODE_CONTAINER_VERSION=1.0.0&lt;/span&gt;
&lt;span class="c"&gt;# Create directory for application&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /data/bot-app&lt;/span&gt;
&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; [ "node", "index.js" ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now you can build your image (use your Docker id here - and mind the trailing dot):&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;YOUR_DOCKER_ID&amp;gt;/node-container &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And to start your Docker container with the Discord bot (add in your Discord token):&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -e token="&amp;lt;YOUR_TOKEN&amp;gt;" -d &amp;lt;YOUR_DOCKER_ID&amp;gt;/node-container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now you can ping your bot! 🤖&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqo188unw8jn50q8kcyha.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fqo188unw8jn50q8kcyha.png" alt="discord"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read a long version of this post &lt;a href="https://medium.com/voice-tech-podcast/yeah-a-discord-ai-powered-bot-baby-d9cb73b4775d?source=friends_link&amp;amp;sk=5fd7e544211b3f64b8e5ca476dd547c9" rel="noopener noreferrer"&gt;in my blog&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Javascript: &lt;code&gt;in&lt;/code&gt; vs &lt;code&gt;of&lt;/code&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From &lt;a href="https://www.linkedin.com/in/pnigelbrown/" rel="noopener noreferrer"&gt;Nigel&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This week I learned about a neat little trick when iterating through arrays in javascript. The important of &lt;code&gt;in&lt;/code&gt; which gives you the position in the array, and &lt;code&gt;of&lt;/code&gt; which gives you the value of the element in the array. Fun!&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;myArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mouse&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;myArray&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 0, 1, 2&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;myArray&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// "cat", "dog", "mouse"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Shout out to &lt;a href="https://dev.to/bourdakos1"&gt;Nick Bourdakos&lt;/a&gt; for showing me this one.&lt;/p&gt;
&lt;h2&gt;
  
  
  Bee Travels
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__186204"&gt;
    &lt;a href="/poojamakes" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F186204%2Fe70705fd-de05-4aac-839b-6ded21dbdb29.jpg" alt="poojamakes image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/poojamakes"&gt;Pooja Mistry&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/poojamakes"&gt;Technologist and Developer Advocate who is always learning new things and is excited to share! &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;We're hosting a 6-part online series on microservices. If you are new to microservices or have been using microservices for some time – you will get high-quality developer education. Register for all six session below. The replay of each session will be available at the same link.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzi853kk50j9y2yqtt15i.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzi853kk50j9y2yqtt15i.png" alt="beetravels-session"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.crowdcast.io/e/beetravels_part1" rel="noopener noreferrer"&gt;Part 1: Designing Mircoservices&lt;/a&gt; (October 20, 2020)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.crowdcast.io/e/beetravels_part2" rel="noopener noreferrer"&gt;Part 2: Deploying Mircoservices&lt;/a&gt; (October 27, 2020)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.crowdcast.io/e/beetravels_part3" rel="noopener noreferrer"&gt;Part 3: Debugging Mircoservices&lt;/a&gt; (November 5, 2020)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.crowdcast.io/e/beetravels_part4" rel="noopener noreferrer"&gt;Part 4: Developing Microservices with Node.js&lt;/a&gt; (November 10, 2020)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.crowdcast.io/e/beetravels_part5" rel="noopener noreferrer"&gt;Part 5: Virtual Hands On Building Microservices Lab&lt;/a&gt; (November 17, 2020)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.crowdcast.io/e/beetravels_part6" rel="noopener noreferrer"&gt;Part 6: Data Handling in Mircoservices&lt;/a&gt; (November 24, 2020)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Byte-Sized Tech Tips Round-Up: Week 2</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Thu, 22 Oct 2020 17:14:23 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-2-39pk</link>
      <guid>https://forem.com/ibmdeveloper/byte-sized-tech-tips-round-up-week-2-39pk</guid>
      <description>&lt;h2&gt;
  
  
  Using a Dictionary -- in Bash?!
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__485420"&gt;
    &lt;a href="/stevemar" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F485420%2Feb96c12c-6cba-483c-91f7-9e929549f514.jpeg" alt="stevemar image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/stevemar"&gt;Steve Martinelli&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/stevemar"&gt;Canadian | IBMer | FOSS | Python | Kubernetes&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;

&lt;p&gt;There's already tons of literature on this topic but it's something I learned this week. The reason why I'm doing this will come in another post ;) &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note, you'll need bash 4.0 or newer for this to work.&lt;/em&gt;&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="c"&gt;#!/usr/bin/env bash&lt;/span&gt;

&lt;span class="nb"&gt;declare&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; dict

&lt;span class="nv"&gt;dict&lt;/span&gt;&lt;span class="o"&gt;=([&lt;/span&gt;&lt;span class="s2"&gt;"fruit"&lt;/span&gt;&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="s2"&gt;"apple"&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"meat"&lt;/span&gt;&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="s2"&gt;"chicken"&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"dairy"&lt;/span&gt;&lt;span class="o"&gt;]=&lt;/span&gt;&lt;span class="s2"&gt;"cheese"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="p"&gt;!dict[@]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Running it prints:&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="nv"&gt;$ &lt;/span&gt;./main.sh 
&lt;span class="nv"&gt;dairy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cheese
&lt;span class="nv"&gt;fruit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;apple
&lt;span class="nv"&gt;meat&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;chicken
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Clean up your git changes
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__485420"&gt;
    &lt;a href="/stevemar" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F485420%2Feb96c12c-6cba-483c-91f7-9e929549f514.jpeg" alt="stevemar image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/stevemar"&gt;Steve Martinelli&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/stevemar"&gt;Canadian | IBMer | FOSS | Python | Kubernetes&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;Git - the tool you never stop learning about. How have I &lt;em&gt;just&lt;/em&gt; learned to clean up a bunch of changes in one go?!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And here I was doing &lt;code&gt;git restore foo.bar&lt;/code&gt; ... all that time wasted! Thanks &lt;a href="https://dev.to/jjasghar"&gt;JJ Asghar&lt;/a&gt;!&lt;/p&gt;
&lt;h2&gt;
  
  
  Docusaurus
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__186204"&gt;
    &lt;a href="/poojamakes" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F186204%2Fe70705fd-de05-4aac-839b-6ded21dbdb29.jpg" alt="poojamakes image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/poojamakes"&gt;Pooja Mistry&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/poojamakes"&gt;Technologist and Developer Advocate who is always learning new things and is excited to share! &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;This week I got my hands dirty setting up a new site for our Bee Travels project. It uses GitHub pages and is available &lt;a href="https://bee-travels.github.io/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I've created static sites with GitHub pages before but this time was different because we decided to use &lt;a href="https://docusaurus.io/" rel="noopener noreferrer"&gt;Docusaurus&lt;/a&gt; which was open sourced by Facebook, see the &lt;a href="https://github.com/facebook/docusaurus" rel="noopener noreferrer"&gt;Docusaurus Git Repo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I was blown away by just how simple it was to set up and how many things were included out of the box. We were even able to embed a running instance of our application too!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Embedded application&lt;/em&gt;&lt;br&gt;
&lt;a href="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%2Fi%2Fjzkt0z70yp1uvovgy8h5.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjzkt0z70yp1uvovgy8h5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Instructions &amp;amp; Docs&lt;/em&gt;&lt;br&gt;
&lt;a href="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%2Fi%2Frji3i34k79b342rv55n6.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Frji3i34k79b342rv55n6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://github.com/bee-travels/bee-travels.github.io" rel="noopener noreferrer"&gt;Bee Travels GitHub Pages Repo&lt;/a&gt; for how we configured Docusaurus.&lt;/p&gt;
&lt;h2&gt;
  
  
  Skype a Scientist
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From &lt;a href="https://www.linkedin.com/in/pnigelbrown/" rel="noopener noreferrer"&gt;Nigel&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Volunteering and mentoring is essential to growing your career at any company. IBM emphasizes these types of activities. I recently signed up to participate with &lt;a href="https://www.skypeascientist.com/" rel="noopener noreferrer"&gt;Skype a Scientist&lt;/a&gt; where professionals in STEM fields are connected with schools to present to students.&lt;/p&gt;

&lt;p&gt;Yesterday was my first session. I spoke with students from Emerson Elementary School in California. I told them about supercomputers and showed them a few single board computers. They most wanted to know about Minecraft :) &lt;/p&gt;

&lt;p&gt;Below are a few of the questions they asked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What kind of a scientist are you?&lt;/li&gt;
&lt;li&gt;Give us examples of experiments that you do.&lt;/li&gt;
&lt;li&gt;Do you create video games?&lt;/li&gt;
&lt;li&gt;Are you always on the computer?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're even a little bit interested I would encourage you to sign up as it was a very rewarding experience.&lt;/p&gt;
&lt;h2&gt;
  
  
  Managing your Node.js versions
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__258061"&gt;
    &lt;a href="/jritten" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F258061%2F8333b0d3-40a3-42bf-8aa7-94ba6757406b.png" alt="jritten image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/jritten"&gt;Jenna Ritten&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/jritten"&gt;Jenna left Detroit to attend Dev Bootcamp San Francisco to learn full-stack web development before joining IBM as part of the Tech Re-Entry program. She advocates for underrepresented people in tech.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 
&lt;/blockquote&gt;

&lt;p&gt;My FAVORITE tool for managing the various Node.js versions I have installed for different projects is &lt;a href="https://github.com/nvm-sh/nvm" rel="noopener noreferrer"&gt;Node Version Manager (nvm)&lt;/a&gt;. It’s super simple to install and to use.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pro-Tip: I recommend using Terminal and not iTerm since iTerm will not hold onto nvm and you’ll have to continuously re-install it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Check out the following tutorial to quickly install and start using nvm! I’ve included the following code snippets as well. Voila!&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="c"&gt;# Install using curl&lt;/span&gt;
curl &lt;span class="nt"&gt;-sL&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.36.0/install.sh &lt;span class="nt"&gt;-o&lt;/span&gt; install_nvm.sh

&lt;span class="c"&gt;# run the install script with bash&lt;/span&gt;
bash install_nvm.sh

&lt;span class="c"&gt;# confirm that your profile is updated *&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt;
&lt;span class="c"&gt;# load nvm *&lt;/span&gt;
  &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt;
&lt;span class="c"&gt;# load nvm bash_completion *&lt;/span&gt;
  &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/bash_completion"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/bash_completion"&lt;/span&gt; 

&lt;span class="c"&gt;# restart your terminal&lt;/span&gt;
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bash_profile

&lt;span class="c"&gt;# verify it worked // should return 'nvm'&lt;/span&gt;
&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; nvm

&lt;span class="c"&gt;# Using brew, install Node Version Manager (nvm)&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;nvm

&lt;span class="c"&gt;# run the command for next steps to finish the install&lt;/span&gt;
brew info nvm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  IBM Developer Cloud Native Summit
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__112754"&gt;
    &lt;a href="/maxkatz" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F112754%2F2bd83450-5dfe-489e-be04-5c6b7c7a4c8c.jpg" alt="maxkatz image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/maxkatz"&gt;Max Katz&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/maxkatz"&gt;I’m passionate about ​Developer Relations​ and the ​No-Code​ space.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;For a longer version of this entry check out Max's &lt;a href="https://maxkatz.org/2020/10/14/cloud-native-developer-summit-video-replay/" rel="noopener noreferrer"&gt;blog post&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/nimicent"&gt;Julia Nash&lt;/a&gt; and &lt;a href="https://dev.to/lidderupk"&gt;Upkar Lidder&lt;/a&gt; hosted a half-day livestream that focused on Cloud Native technologies this Tuesday.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0n8ljhw6tclvauabeyj4.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F0n8ljhw6tclvauabeyj4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In case you missed the live event you can watch the replay on &lt;a href="https://www.crowdcast.io/e/cloud-native-dev-summit" rel="noopener noreferrer"&gt;Crowdcast.io&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Byte-Sized Tech Tips Round-Up: Week 1</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Sat, 17 Oct 2020 03:12:59 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/ibm-developer-tips-week-2-46la</link>
      <guid>https://forem.com/ibmdeveloper/ibm-developer-tips-week-2-46la</guid>
      <description>&lt;h2&gt;
  
  
  Populate a Cloudant database with Python
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__485420"&gt;
    &lt;a href="/stevemar" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F485420%2Feb96c12c-6cba-483c-91f7-9e929549f514.jpeg" alt="stevemar image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/stevemar"&gt;Steve Martinelli&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/stevemar"&gt;Canadian | IBMer | FOSS | Python | Kubernetes&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/blockquote&gt;

&lt;p&gt;In just a few lines I was able to use the &lt;a href="https://github.com/cloudant/python-cloudant" rel="noopener noreferrer"&gt;Cloudant Python SDK&lt;/a&gt; to quickly seed a database with 1400 entries from a YAML file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro-tip:&lt;/strong&gt; Make sure you're using the Replay429Adapter in your client or you'll surely hit a Rate Limit Error&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="n"&gt;yaml&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cloudant&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Cloudant&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cloudant.adapters&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Replay429Adapter&lt;/span&gt;


&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;foo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bar&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;baz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Cloudant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                  &lt;span class="n"&gt;adapter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;Replay429Adapter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;initialBackoff&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_database&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;repos&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;throw_on_exists&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;repos.yaml&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;data_loaded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;yaml&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;safe_load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;data_loaded&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;repos&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Read more about the Cloudant DBaaS on &lt;a href="https://cloud.ibm.com/catalog/cloudant" rel="noopener noreferrer"&gt;IBM Cloud&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Expo and iOS
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__186204"&gt;
    &lt;a href="/poojamakes" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F186204%2Fe70705fd-de05-4aac-839b-6ded21dbdb29.jpg" alt="poojamakes image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/poojamakes"&gt;Pooja Mistry&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/poojamakes"&gt;Technologist and Developer Advocate who is always learning new things and is excited to share! &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;This week I was had a chance to play with &lt;a href="https://expo.io/" rel="noopener noreferrer"&gt;expo&lt;/a&gt;. The application we're building in React will work on Android and iOS from the same JavaScript codebase. Expo also provides access to device capabilities like camera, location, notifications. Putting it all together was the iOS simulator functions of Xcode!&lt;/p&gt;

&lt;p&gt;Read more about using Expo with iOS in the &lt;a href="https://docs.expo.io/workflow/ios-simulator/" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bang-bang
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From &lt;a href="https://www.linkedin.com/in/pnigelbrown/" rel="noopener noreferrer"&gt;Nigel&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm currently taking the &lt;a href="https://www.redhat.com/en/services/training/rh124-red-hat-system-administration-i" rel="noopener noreferrer"&gt;Red Hat System Administration I&lt;br&gt;
&lt;/a&gt; course in preparation of the &lt;a href="https://www.redhat.com/en/services/training/do180-red-hat-openshift-I-containers-kubernetes" rel="noopener noreferrer"&gt;Red Hat OpenShift I: Containers &amp;amp; Kubernetes&lt;/a&gt; course. One this I learned this week was the &lt;code&gt;!!&lt;/code&gt; Bang-bang command. The &lt;code&gt;!!&lt;/code&gt; Bang-bang command repeats the last command. It's especially helpful with commands that you forgot to put &lt;code&gt;sudo&lt;/code&gt; in front of. For example:&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="nv"&gt;$ &lt;/span&gt;yum update
Loaded plugins: priorities, update-motd, upgrade-helper
You need to be root to perform this command.

&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="o"&gt;!!&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;yum update
Loaded plugins: priorities, update-motd, upgrade-helper
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Read more about &lt;a href="https://www.redhat.com/sysadmin/bash-bang-commands" rel="noopener noreferrer"&gt;bang bang commands&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  API Connect Sandbox features
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;From&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__258061"&gt;
    &lt;a href="/jritten" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F258061%2F8333b0d3-40a3-42bf-8aa7-94ba6757406b.png" alt="jritten image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/jritten"&gt;Jenna Ritten&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/jritten"&gt;Jenna left Detroit to attend Dev Bootcamp San Francisco to learn full-stack web development before joining IBM as part of the Tech Re-Entry program. She advocates for underrepresented people in tech.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
&lt;/blockquote&gt;

&lt;p&gt;This week I hosted a &lt;a href="https://www.crowdcast.io/e/dev-tools-apiconnect/" rel="noopener noreferrer"&gt;workshop about API Connect&lt;/a&gt;. One thing I learned about this week was API Connect's Sandbox service. I had played with tools such as Postman before but the Sandbox service has great features such as adding collaborators and deploying your sandbox to a staging-like environment. Those really impressed me!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The collaborators of the project&lt;/strong&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnjyxbpbnhdpjb431vh0d.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnjyxbpbnhdpjb431vh0d.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The URL to our staging environment&lt;/strong&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fj3s7xegswi6yfgaxlyqd.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fj3s7xegswi6yfgaxlyqd.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read more about &lt;a href="https://cloud.ibm.com/catalog/services/api-connect" rel="noopener noreferrer"&gt;API Connect&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>bash</category>
      <category>python</category>
      <category>react</category>
    </item>
    <item>
      <title>Introducing "Byte-Sized Tech Tips Round-Up"</title>
      <dc:creator>Steve Martinelli</dc:creator>
      <pubDate>Fri, 09 Oct 2020 17:55:26 +0000</pubDate>
      <link>https://forem.com/ibmdeveloper/ibm-developer-tips-week-1-5ckd</link>
      <guid>https://forem.com/ibmdeveloper/ibm-developer-tips-week-1-5ckd</guid>
      <description>&lt;p&gt;Welcome to the very first post for the "Byte-Sized Tech Tips Round-Up" series. This will be a weekly series of tips and tricks from IBM Developer Advocates where we will discuss anything and anything techie!&lt;/p&gt;

&lt;p&gt;There's only &lt;strong&gt;one&lt;/strong&gt; rule: &lt;em&gt;Keep it "byte" sized!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We hope you enjoy these posts, feel free to comment on the posts and follow our Developer Advocates. Below is a list of folks that have contributed to the content.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__485420"&gt;
    &lt;a href="/stevemar" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F485420%2Feb96c12c-6cba-483c-91f7-9e929549f514.jpeg" alt="stevemar image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/stevemar"&gt;Steve Martinelli&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/stevemar"&gt;Canadian | IBMer | FOSS | Python | Kubernetes&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag__user ltag__user__id__186204"&gt;
    &lt;a href="/poojamakes" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F186204%2Fe70705fd-de05-4aac-839b-6ded21dbdb29.jpg" alt="poojamakes image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/poojamakes"&gt;Pooja Mistry&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/poojamakes"&gt;Technologist and Developer Advocate who is always learning new things and is excited to share! &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag__user ltag__user__id__112754"&gt;
    &lt;a href="/maxkatz" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F112754%2F2bd83450-5dfe-489e-be04-5c6b7c7a4c8c.jpg" alt="maxkatz image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/maxkatz"&gt;Max Katz&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/maxkatz"&gt;I’m passionate about ​Developer Relations​ and the ​No-Code​ space.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag__user ltag__user__id__258061"&gt;
    &lt;a href="/jritten" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F258061%2F8333b0d3-40a3-42bf-8aa7-94ba6757406b.png" alt="jritten image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/jritten"&gt;Jenna Ritten&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/jritten"&gt;Jenna left Detroit to attend Dev Bootcamp San Francisco to learn full-stack web development before joining IBM as part of the Tech Re-Entry program. She advocates for underrepresented people in tech.&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag__user ltag__user__id__126043"&gt;
    &lt;a href="/blumareks" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F126043%2Fc2dd5bde-3994-4722-beef-eb64212256fc.jpeg" alt="blumareks image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/blumareks"&gt;Marek Sadowski&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/blumareks"&gt;an entrepreneur hijacked by an enterprise to hack robots with AI - and I published a book on Serverless Swift&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag__user ltag__user__id__"&gt;
    &lt;div class="ltag__user__pic"&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%2F99mvlsfu5tfj9m7ku25d.png" alt="[deleted user] image"&gt;
    &lt;/div&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;[Deleted User]&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag__user ltag__user__id__173296"&gt;
    &lt;a href="/moficodes" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img 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%2Fuser%2Fprofile_image%2F173296%2Fff1c7da5-b8e7-47d6-9606-e1557494c6a5.jpeg" alt="moficodes image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/moficodes"&gt;Mofi Rahman&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/moficodes"&gt;Go Developer, Does Container-y stuff, Collects Stickers (in no particular order)&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>python</category>
      <category>react</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
