<?xml version="1.0" encoding="UTF-8"?>
<rss version='2.0' xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kevin Rich</title>
    <description>Software Development Nerd</description>
    <link>http://www.whoiskevinrich.com/feed</link>
    <atom:link href="http://www.whoiskevinrich.com/feed" rel="self" type="application/rss+xml"/>
    <category domain="www.whoiskevinrich.com">Content Management/Blog</category>
    <language>en-us</language>
      <pubDate>Wed, 03 Aug 2022 17:11:31 -0700</pubDate>
    <managingEditor>whoiskevinrich@gmail.com (Kevin Rich)</managingEditor>
      <item>
        <guid>http://www.whoiskevinrich.com/ensuring-cdk-resource-properties#53893</guid>
          <pubDate>Wed, 03 Aug 2022 17:11:31 -0700</pubDate>
        <link>http://www.whoiskevinrich.com/ensuring-cdk-resource-properties</link>
        <title>Ensuring CDK Resource Properties</title>
        <description></description>
        <content:encoded><![CDATA[<h1 id="problem">Problem</h1>

<p>Using CDK v2, I wanted to ensure all of my lambda functions had the <code>nodejs14.x</code> runtime. I knew I could ensure that at least one resource was created with the desired property using the <code>aws-cdk-lib/assertions</code> package like this:</p>
<div class="highlight"><pre><span></span><span class="nx">describe</span><span class="p">(</span><span class="s1">&#39;lambdas&#39;</span><span class="p">,()</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="nx">test</span><span class="p">(</span><span class="s1">&#39;should all have NodeJS14.x runtime&#39;</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="kr">const</span> <span class="nx">app</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">cdk</span><span class="p">.</span><span class="nx">App</span><span class="p">();</span>
    <span class="kr">const</span> <span class="nx">stack</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">MyStack</span><span class="p">(</span><span class="nx">app</span><span class="p">,</span> <span class="s1">&#39;MyTestStack&#39;</span><span class="p">);</span>
    <span class="nx">template</span> <span class="o">=</span> <span class="nx">Template</span><span class="p">.</span><span class="nx">fromStack</span><span class="p">(</span><span class="nx">stack</span><span class="p">);</span>

    <span class="c1">// false positive: this passes the test</span>
    <span class="c1">// because at least one matching resource is created</span>
    <span class="nx">template</span><span class="p">.</span><span class="nx">hasResourceProperties</span><span class="p">(</span><span class="s1">&#39;AWS::Lambda::Function&#39;</span><span class="p">,</span> <span class="p">{</span>
      <span class="nx">Runtime</span><span class="o">:</span> <span class="s1">&#39;nodejs14.x&#39;</span>
    <span class="p">})</span>
  <span class="p">});</span>
<span class="p">});</span>
</pre></div>
<hr>

<p><strong>UPDATE 8/7: Previously, I tried leveraging the <code>allResourcesHaveProperty()</code> method on <code>Template</code>, but I didn&#39;t capture the correct results.</strong></p>

<hr>

<p>The solution is to leverage the <code>Capture</code> object to record values for entries matching the expected properties in the template:</p>
<div class="highlight"><pre><span></span><span class="nx">describe</span><span class="p">(</span><span class="s1">&#39;lambdas&#39;</span><span class="p">,()</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="nx">test</span><span class="p">(</span><span class="s1">&#39;should all have NodeJS14.x runtime&#39;</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="kr">const</span> <span class="nx">app</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">cdk</span><span class="p">.</span><span class="nx">App</span><span class="p">();</span>
    <span class="kr">const</span> <span class="nx">stack</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">MyStack</span><span class="p">(</span><span class="nx">app</span><span class="p">,</span> <span class="s1">&#39;MyTestStack&#39;</span><span class="p">);</span>
    <span class="nx">template</span> <span class="o">=</span> <span class="nx">Template</span><span class="p">.</span><span class="nx">fromStack</span><span class="p">(</span><span class="nx">stack</span><span class="p">);</span>

    <span class="c1">// capture the Runtime configuration of all Lambdas</span>
    <span class="kr">const</span> <span class="nx">runtimeCapture</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Capture</span><span class="p">();</span>
    <span class="nx">template</span><span class="p">.</span><span class="nx">hasResourceProperties</span><span class="p">(</span><span class="s1">&#39;AWS::Lambda::Function&#39;</span><span class="p">,</span> <span class="p">{</span>
      <span class="nx">Runtime</span>: <span class="kt">runtimeCapture</span>
    <span class="p">});</span>

    <span class="kd">let</span> <span class="nx">captureCount</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
    <span class="k">while</span> <span class="p">(</span><span class="nx">runtimeCapture</span><span class="p">.</span><span class="nx">next</span><span class="p">())</span> <span class="p">{</span>
      <span class="nx">captureCount</span><span class="o">++</span><span class="p">;</span>

      <span class="c1">// we should have captured the correct runtime for each resource captured</span>
      <span class="nx">expect</span><span class="p">(</span><span class="nx">runtimeCapture</span><span class="p">.</span><span class="nx">asString</span><span class="p">()).</span><span class="nx">toBe</span><span class="p">(</span><span class="s1">&#39;nodejs14.x&#39;</span><span class="p">);</span>
    <span class="p">}</span>

    <span class="c1">// we should have at least one lambda resource</span>
    <span class="nx">expect</span><span class="p">(</span><span class="nx">captureCount</span><span class="p">).</span><span class="nx">toBeGreaterThan</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
  <span class="p">})</span>
<span class="p">})</span>
</pre></div>
<p>packages:</p>
<div class="highlight"><pre><span></span>  <span class="s2">&quot;devDependencies&quot;</span><span class="err">:</span> <span class="p">{</span>
    <span class="nt">&quot;@types/jest&quot;</span><span class="p">:</span> <span class="s2">&quot;^27.5.2&quot;</span><span class="p">,</span>
    <span class="nt">&quot;@types/node&quot;</span><span class="p">:</span> <span class="s2">&quot;10.17.27&quot;</span><span class="p">,</span>
    <span class="nt">&quot;aws-cdk&quot;</span><span class="p">:</span> <span class="s2">&quot;2.33.0&quot;</span><span class="p">,</span>
    <span class="nt">&quot;jest&quot;</span><span class="p">:</span> <span class="s2">&quot;^27.5.1&quot;</span><span class="p">,</span>
    <span class="nt">&quot;ts-jest&quot;</span><span class="p">:</span> <span class="s2">&quot;^27.1.4&quot;</span><span class="p">,</span>
    <span class="nt">&quot;ts-node&quot;</span><span class="p">:</span> <span class="s2">&quot;^10.9.1&quot;</span><span class="p">,</span>
    <span class="nt">&quot;typescript&quot;</span><span class="p">:</span> <span class="s2">&quot;~3.9.7&quot;</span>
  <span class="p">}</span><span class="err">,</span>
  <span class="s2">&quot;dependencies&quot;</span><span class="err">:</span> <span class="p">{</span>
    <span class="nt">&quot;aws-cdk-lib&quot;</span><span class="p">:</span> <span class="s2">&quot;2.33.0&quot;</span><span class="p">,</span>
    <span class="nt">&quot;constructs&quot;</span><span class="p">:</span> <span class="s2">&quot;^10.0.0&quot;</span><span class="p">,</span>
    <span class="nt">&quot;esbuild&quot;</span><span class="p">:</span> <span class="s2">&quot;^0.14.50&quot;</span><span class="p">,</span>
  <span class="p">}</span>
</pre></div>]]></content:encoded>
      </item>
      <item>
        <guid>http://www.whoiskevinrich.com/software-engineering-onboarding#52169</guid>
          <pubDate>Sun, 20 Jun 2021 08:12:29 -0700</pubDate>
        <link>http://www.whoiskevinrich.com/software-engineering-onboarding</link>
        <title>Free Range Management</title>
        <description>Glorious Purpose Part 1: Supporting Growth</description>
        <content:encoded><![CDATA[<h2 id="free-range-management">Free Range Management</h2>

<p>I have three main goals as a manager. In order:</p>

<ol>
<li>Support the growth of careers for my directs</li>
<li>Help with roadblocks and pain points for the teams</li>
<li>Align the team and the business</li>
</ol>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/499cd5d9-39b7-429d-b013-59ffb0168200/tumblr_14e1eac35d3fd91602bcd8397364adf2_20de0994_540.gif" /></p>

<h2 id="support-their-path">Support Their Path</h2>

<p>One of the questions I ask frequently is &quot;What does your career trajectory look like; what are your plans five years from now?&quot;</p>

<p>Some folks want to grow into a leadership/management role. These folks are typically pretty ambitious. They want to learn about the people skills, how to influence others, how to think strategically. These are the folks that probably already understand that they need to learn continuously and will periodically ask advice. Support them by finding opportunities to facilitate or lead efforts and/or teams.</p>

<p>Some want to grow their technical chops. They want to learn the cool new things. I found a lot of these want the trust and backing to lead their teams, but aren&#39;t interested in management because they want to stay closer to the code. Support them by finding opportunities for them to take on technically interesting challenges and resisting the urge to over-solution for them.</p>

<p>Others want to stay where they are. They have hit a certain point and don&#39;t want to spend more time learning. Some are close to retirement, some are juggling issues in their personal life, others are just unmotivated to grow. Support these folks by finding opportunities to deepen their understanding of the tools they want to use.</p>

<h2 id="support-continuous-learning">Support Continuous Learning</h2>

<p>Encourage and support continuous learning for every member of your team. My current gig graciously allows 20% of time to be dedicated to learning; every Friday is Learning Friday. We don&#39;t schedule meetings with the staff and I encourage them to decline meetings unless they are centered around group learning projects or communities of practice. It&#39;s critical to not dictate what is learned, unless it&#39;s part of required training or a performance improvement plan, though an expectation around sharing what was learned is reasonable.</p>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/448571ef-b8e9-4cd3-bac9-37d02dfa4f03/butwhy.gif" /></p>

<p><strong>The business will not understand.</strong></p>

<p>Short term, there is little perceived value in allowing 20% of time slip when there are so many important things to do, especially if they are learning about Rust and your run a C# shop. This is where we need to align the business to the team. There are two main reasons why this <em>play time</em> is important.</p>

<p>First, we have innovation / avoiding stagnation. When we don&#39;t learn new skills, we tend to fall back on what has worked. We all know someone who has worked at a shop that used an outdated development model, framework, or process because of status quo. This is what we&#39;ve always done. When we allow folks to participate in unguided learning, they are exposed to new ideas and we get innovation. If your organization is relying on a specific group to innovate or to grow by constantly hiring new folks, you&#39;ve disempowered the team&#39;s ability to learn and grow. Worse, you&#39;re <strong>actively harming</strong> their careers.</p>

<p>Second, we have employee happiness / retention. Software engineers are smart. Most of them understand on some level they need to keep their skills fresh and technology changes constantly. A good analogy for non-technical folks to understand why keeping skills fresh is to think of your smartphone. </p>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/d2c174d5-548b-4707-8b23-eb47d31d1957/phoneos.png" /></p>

<p>In 2009, the <a href="https://www.statista.com/statistics/266136/global-market-share-held-by-smartphone-operating-systems/">phone OS market was dominated by Symbian OS and RIM</a>. Most people don&#39;t couldn&#39;t connect these OS&#39;s to Nokia and Blackberry, let <em>alone</em> be interested in using them today. Pretend you have a job where you can <em>only</em> use a Blackberry. That&#39;s the speed at which technology changes.</p>

<p>To further the analogy, remember that because Nokia and Blackberry didn&#39;t innovate fast enough, they were dominated by Android and iOS quickly by the end of 2010. If you business doesn&#39;t feel it needs to keep pulse of the current technical scene, it can be expensive and difficult to pivot to meet the market&#39;s demand.</p>

<p>Engineers want to use new tools and gadgets. Maybe 95% of new shiny tools are never picked up and used in production, but your staff will feel less shackled because they will have opportunities to find ways to add value by reducing toil in their workflow or pick up that new cloud service that improves cost efficiency for some workflow.</p>
]]></content:encoded>
      </item>
      <item>
        <guid>http://www.whoiskevinrich.com/adventures-in-sci-fi-part-4#50654</guid>
          <pubDate>Tue, 08 Sep 2020 21:29:14 -0700</pubDate>
        <link>http://www.whoiskevinrich.com/adventures-in-sci-fi-part-4</link>
        <title>Adventures in Sci-Fi (Part 4)</title>
        <description>Into the 21st Century</description>
        <content:encoded><![CDATA[<p>I&#39;m that age in which the 90s seem &quot;only a few years ago&quot; which means that most of the films here I consider &quot;new&quot; despite some (looking at you <em>Pitch Black</em>) are twenty years old.The one thing that stands out as I added films from this era is the number of &quot;indie&quot; films. <em>Pitch Black, Sunshine, Moon</em>, and <em>The Signal</em> could not have been made before the 2000s where CG became &quot;cheap&quot; to the detriment of Visual Effects Houses such as <a href="https://www.hollywoodreporter.com/behind-screen/revealing-rhythm-hues-life-pi-682526">Rhythm and Hues Studio</a> which filed for bankruptcy two weeks before winning an Oscar for their work on <em>Life of Pi</em>.</p>

<p><a href="http://whoiskevinrich.com/adventures-in-sci-fi">Part I: The Before Times; the 60&#39;s &amp; 70&#39;s</a><br>
<a href="http://whoiskevinrich.com/adventures-in-sci-fi-part-2">Part II: The Awesome 80&#39;s</a><br>
<a href="http://whoiskevinrich.com/adventures-in-sci-fi-part-3">Part III: The 90&#39;s; Bigger &amp; Badder</a><br>
<a href="http://www.whoiskevinrich.com/adventures-in-sci-fi-part-4">Part IV: Into the 21st Century</a></p>

<h1 id="pitch-black-2000">Pitch Black (2000)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/beb20412-4ddf-4765-a99c-dcdd795bab9f/PitchBlack.gif" /></p>

<p>Director: David Twohy (The Arrival, A Perfect Getaway)<br>
Starring: Vin Deisel, Keith David<br>
Summary: After crash landing on a planet that is nearly always in a state of perpetual daytime, the passengers and crew face danger when darkness does come.<br>
Fun Fact: The hot desert was in fact about 50 degree F. &quot;Sweat&quot; was sprayed on the actors</p>

<h1 id="the-fountain-2006">The Fountain (2006)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/23c95d87-54a5-4fe1-a567-f6790e0b9f8b/Fountain.gif" /></p>

<p>Director: Darren Aronofsky (Pi, Requiem for a Dream, Noah)<br>
Starring: Hugh Jackman, Rachel Weisz<br>
Summary: A surreal mix of three stories in which men, played by Jackman, seek eternity with the women (played by Weisz) they love.<br>
Fun Fact: The director chose micro-photography over CG Effects</p>

<h1 id="sunshine-2007">Sunshine (2007)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/95cd290b-eb24-41f8-8402-fb8996a262f2/Sunshine.gif" /></p>

<p>Director: Danny Boyle (28 Days Later..., Trainspotting, Steve Jobs)<br>
Starring: Chris Evans, Cillian Murphy, Hiroyuki Sanada, Michelle Yeoh<br>
Summary: A small crew is on a mission to detonate a bomb to reignite a dying Sun.<br>
Fun Fact: The space suit helmets&#39; design is inspired by Kenny, from South Park.</p>

<h1 id="district-9-2009">District 9 (2009)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/41dd9ad5-9c1c-4fbe-a756-c25a13c0be0e/District9.gif" /></p>

<p>Director: Niell Blomkamp (Elysium, Chappie)<br>
Starring: Sharlto Copley<br>
Summary: A documentary-style film exploring xenophobia, racism, and humanity in South Africa after millions of illegal (space) aliens seek refuge there.<br>
Fun Fact: Produced with a budget of $30 million. By comparison, Avatar was released the same year with a budget of $425 million.</p>

<h1 id="moon-2009">Moon (2009)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/beb20412-4ddf-4765-a99c-dcdd795bab9f/Moon.gif" /></p>

<p>Director: Duncan Jones (Source Code, Mute, Warcraft)<br>
Starring: Sam Rockwell, Kevin Spacey<br>
Summary: Sam Bell nears the end of his three-year contract working alone on the Moon with his computer companion GERTY, sending a vital resource back to Earth.<br>
Fun Fact: Kevin Spacey, who voiced the computer GERTY, agreed to join the project only if he could see the film first and liked it.</p>

<h1 id="predators-2009">Predators (2009)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/615386f4-89dd-4a2b-87a2-475d7082e9d2/Predators.gif" /></p>

<p>Director: Nimród Antal (Armored, The Whiskey Bandit)<br>
Starring: Adrien Brodyk, Laurence Fishburne, Topher Grace<br>
Summary: A group of elite warriors from around the globe find themselves hunted in an unfamiliar jungle.<br>
Fun Fact: I&#39;ll take crap for this selection. Though I thoroughly enjoy both Predator and Predator 2, I actually like Predators best of the series.</p>

<h1 id="inception-2010">Inception (2010)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/87103c37-fb3f-448e-b932-04412703c505/Inception.gif" /></p>

<p>Director: Christopher Nolan (Dark Knight, Dunkirk, Memento)<br>
Starring: Leonardo DiCaprio, Joseph Gordon-Levitt, Ellen Page, Tom Hardy<br>
Summary: A heist film with a twist. Instead of hitting a bank, the team is breaking into the mind using dreams.<br>
Fun Fact: Tom Hardy was hired based on his role in &#39;RocknRolla&#39; in 2008</p>

<h1 id="enders-game-2013">Ender&#39;s Game (2013)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/2e7860ea-c13d-4ba8-8fde-1856e103fdb0/EndersGame.gif" /></p>

<p>Director: Gavin Hood (X-Men Origins: Wolverine, Eye in the Sky)<br>
Starring: Asa Butterfield, Harrison Ford<br>
Summary: Based on the novel byOrson Scott Card. The world&#39;s gifted children are enrolled in a military academy with the goal of saving the world from an invading species.<br>
Fun Fact: The novel is required reading for U.S. Marine Corps officers as it teaches &quot;lessons in training methodology, leadership, and ethics.&quot;</p>

<h1 id="oblivion-2013">Oblivion (2013)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/beb20412-4ddf-4765-a99c-dcdd795bab9f/Oblivion.gif" /></p>

<p>Director: Joseph Kosinski (TRON: Legacy)<br>
Starring: Tom Cruise, Morgan Freeman, Andrea Riseborough<br>
Summary: Jack is a Technician assigned to extracting the last resources from a doomed Earth. After a ship crashes, he finds things are not exactly as they appear.<br>
Fun Fact: Based on an unpublished graphic novel by Joseph Kosinski.</p>

<h1 id="edge-of-tomorrow-2014">Edge of Tomorrow (2014)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/38bd5e51-362e-40cf-ac08-605fff8bcb22/EdgeOfTomorrow.gif" /></p>

<p>Director: Doug Liman (Swingers, Mr. &amp; Mrs. Smith, Jumper)<br>
Starring: Tom Cruise, Emily Blunt, Bill Paxton<br>
Summary: Loosely based on the novel &#39;All You Need Is Kill&#39; by Hiroshi Sakurazaka. Bill Cage is a public relations officer who finds himself in the middle of the fight. When things go poorly, he finds himself doing it all over again.<br>
Fun Fact: The director wanted to do the film to watch Tom Cruise play a character who was bad at what they do.</p>

<h1 id="the-signal-2014">The Signal (2014)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/650a28bf-5e29-42fc-80f1-d339ce75e775/TheSignal.gif" /></p>

<p>Director: William Eubank (Love, Underwater)<br>
Starring: Brenton Thwaites, Olivia Cooke, Beau Knapp<br>
Summary: Three friends take a road trip together, when they encounter something strange. Nic wakes to find himself in a strange research facility.<br>
Fun Fact: USA Today wrote: &quot;Had Stanley Kubrick and David Lynch made a movie together, it might have looked somthing like &#39;The Signal&#39;&quot;</p>

<h1 id="the-martian-2015">The Martian (2015)</h1>

<p><img alt="Silvrback blog image" class="sb_float_center" src="https://silvrback.s3.amazonaws.com/uploads/22bf6ed6-cf26-4e53-a07c-d24fecdbab3a/TheMartian.gif" /></p>

<p>Director: Ridley Scott (Black Hawk Down, Gladiator, Thelma &amp; Louise)<br>
Starring: Matt Damon<br>
Summary: Based on the novel by Andy Weir. During a storm, astronaut Mark Watney is mistakenly left behind on the surface of Mars, where he must find a way to survive alone.<br>
Fun Fact: The author of the book, Weir, published one chapter at a time online for free. After making a Kindle edition available at 99 cents (the miniumum price) it quickly sold 35,000 copies and gained the attention of publishers and movie studios.</p>
]]></content:encoded>
      </item>
  </channel>
</rss>