<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: vorsprung</title>
    <description>The latest articles on DEV Community by vorsprung (@vorsprung).</description>
    <link>https://dev.to/vorsprung</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%2F134165%2Fb54cb47c-abdd-4e8d-816c-85dbe0bbd8b0.png</url>
      <title>DEV Community: vorsprung</title>
      <link>https://dev.to/vorsprung</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vorsprung"/>
    <language>en</language>
    <item>
      <title>LLMs don't reliably follow instructions</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Wed, 02 Jul 2025 16:23:11 +0000</pubDate>
      <link>https://dev.to/vorsprung/llms-dont-reliably-follow-instructions-2hkm</link>
      <guid>https://dev.to/vorsprung/llms-dont-reliably-follow-instructions-2hkm</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78pd9wlg3lf1zqjgrk0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78pd9wlg3lf1zqjgrk0k.png" alt=" " width="640" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building your MCP server?  Struggling with speed or token window size?&lt;/p&gt;

&lt;p&gt;There's even another catch, LLMs don't reliably follow instructions!&lt;/p&gt;

&lt;p&gt;There are some best practices for building tools as documented by Anthropic &lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/implement-tool-use#best-practices-for-tool-definitions" rel="noopener noreferrer"&gt;"&lt;strong&gt;Provide extremely detailed descriptions.&lt;/strong&gt; This is by far the most important factor in tool performance. Your descriptions should explain every detail about the tool"&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What they don't document is sometimes that this doesn't matter because the LLM won't follow your instructions&lt;/p&gt;

&lt;p&gt;It just won't do what you say!&lt;/p&gt;

&lt;p&gt;For more: these ideas (as well as being based on my own experience) are discussed in &lt;a href="https://www.youtube.com/watch?v=JDMzdaZh9Ig&amp;amp;ab_channel=VanishingGradients" rel="noopener noreferrer"&gt;Episode 51 of the excellent "Vanishing Gradients" podcast&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
    </item>
    <item>
      <title>Using the Model Context Protocol (MCP) to use FRED data</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Sat, 31 May 2025 13:41:32 +0000</pubDate>
      <link>https://dev.to/vorsprung/using-the-model-context-protocol-mcp-to-use-fred-data-k4k</link>
      <guid>https://dev.to/vorsprung/using-the-model-context-protocol-mcp-to-use-fred-data-k4k</guid>
      <description>&lt;p&gt;I've recently started using Claude Pro on the desktop.  It can produce readable reports from a text prompt.  Trouble is it can and will "make up" data.  This is called "Halucinating" in the current AI/LLM discussions.  This is a big problem for most people that just want accurate information!&lt;/p&gt;

&lt;p&gt;One way it can interface with your data in a more reliable way is by using the Model Context Protocol (MCP).  To greatly simplify what MCP does, it pushes external data into prompts&lt;/p&gt;

&lt;p&gt;To get accurate historical financial markets I am using the Federal Reserve Economic Data (FRED) online database via a MCP Server&lt;/p&gt;

&lt;h2&gt;
  
  
  How to install FRED MCP server
&lt;/h2&gt;

&lt;p&gt;I am using a MacBook with Claude Pro&lt;br&gt;
First you need the python "uv" system.  This allows programs like the FRED MCP server to download all the sub systems they need to work and start up.  If you already have homebrew, then installing is&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install uv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then clone the github repo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/Jaldekoa/mcp-fredapi.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;make a note of the path where the cloned repo is&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd mcp-fredapi
pwd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, alter the Claude developer settings with the menu Claude-&amp;gt;Settings then select developer and hit edit config&lt;/p&gt;

&lt;p&gt;Add a json section like this,  the "directory" setting will be the repo path from above&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
{

"mcpServers": {
"mcp-fredapi": {
      "command": "uv",
      "args": [
        "--directory",
        "/Users/jamesandrews/stuff/mcp-fredapi",
        "run",
        "--with",
        "mcp",
        "--with",
        "httpx",
        "mcp",
        "run",
        "server.py"
      ]
    }
    }
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;restart Claude and you should be good to go&lt;/p&gt;

&lt;h2&gt;
  
  
  What can it do?
&lt;/h2&gt;

&lt;p&gt;initially I asked it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using the FRED data from the mcp-fredapi mcp server show the S&amp;amp;P 500 for the last 3 months
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It made this&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphssrexi5m9eimwq5cc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphssrexi5m9eimwq5cc1.png" alt=" " width="800" height="663"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then I asked&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if the trend downwards continues, approximately when will a price of 3000 be reached?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It responded&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;To estimate when the S&amp;amp;P 500 might reach 3,000 if the current downward trend continues, I'll need to calculate the rate of decline from the FRED data and then project it forward

OutputResult

Starting date: 2025-01-23, value: 6118.71
Ending date: 2025-04-22, value: 5287.76
Total days: 89
Total change: -830.95 points
Average daily change: -9.34 points per day
Points to target (3000): 2287.76
Days needed to reach 3000: 245 days
Estimated date to reach 3000: 2025-12-23

Using only the last month of data:
Last month starting date: 2025-03-24, value: 5767.57
Last month days: 29
Last month change: -479.81 points
Last month average daily change: -16.55 points per day
Days needed to reach 3000 (recent trend): 138 days
Estimated date to reach 3000 (recent trend): 2025-09-07

Linear regression model:
Slope: -0.00000013 points per millisecond (-10.94 points per day)
Y-intercept: 226338.02
Estimated date to reach 3000 (regression): 2025-11-14
Days from last data point to reach 3000 (regression): 206 daysBased on my analysis of the S&amp;amp;P 500's downward trend, I've calculated several projections for when the index might reach 3,000:

Using the entire 3-month period (Jan 23 - Apr 22, 2025):

Average daily decline: 9.34 points per day
Estimated date to reach 3,000: December 23, 2025 (245 days from the last data point)


Using only the most recent month (which shows a more accelerated decline):

Average daily decline: 16.55 points per day
Estimated date to reach 3,000: September 7, 2025 (138 days from the last data point)


Using linear regression (most statistically sound approach):

Average daily decline: 10.94 points per day
Estimated date to reach 3,000: November 14, 2025 (206 days from the last data point)



The most recent month shows a much steeper decline (almost double the rate of the entire period), which suggests the downward momentum has been accelerating. If this recent, more aggressive trend continues, we could see the S&amp;amp;P 500 at 3,000 as early as September 2025.
However, the linear regression model, which accounts for the overall trend while smoothing out some volatility, points to mid-November 2025 as the most statistically reliable estimate.
It's important to note that these are purely mathematical projections based on past performance. The stock market is influenced by numerous factors including economic data, Federal Reserve policy, geopolitical events, and investor sentiment that could significantly alter this trajectory.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which is all quite fun!&lt;br&gt;
The advantage of knowing it is FRED data is that it can be rechecked using another method and that the data is "good" and not hallucinated&lt;/p&gt;

&lt;h2&gt;
  
  
  Buyer beware...
&lt;/h2&gt;

&lt;p&gt;If you ask it about stuff that isn't in FRED then it may well make something up.  But it will say that it has done this.  Read what it says carefully...&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>economics</category>
    </item>
    <item>
      <title>Using the Model Context Protocol (MCP) to query Obsidian note taking</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Tue, 06 May 2025 15:31:03 +0000</pubDate>
      <link>https://dev.to/vorsprung/using-the-model-context-protocol-mcp-to-query-obsidian-note-taking-3fhf</link>
      <guid>https://dev.to/vorsprung/using-the-model-context-protocol-mcp-to-query-obsidian-note-taking-3fhf</guid>
      <description>&lt;p&gt;I've recently started using Claude Pro on the desktop.  It can do a lot of things like simple coding and producing readable reports from data&lt;/p&gt;

&lt;p&gt;One way it can interface with your data in a more reliable way is by using the Model Context Protocol (MCP).  To greatly simplify what MCP does, it pushes external data into prompts&lt;/p&gt;

&lt;p&gt;I've been keeping notes in Obsidian for a  couple of years, it's semi structured and so an idea target for the LLM in Claude Pro&lt;/p&gt;

&lt;p&gt;You can find out about Obsidian &lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;on their site&lt;/a&gt; It's free to use and open source&lt;/p&gt;

&lt;h2&gt;
  
  
  Add the obsidian-mcp server
&lt;/h2&gt;

&lt;p&gt;Adding this project is very simple, see the repo &lt;a href="https://github.com/smithery-ai/mcp-obsidian" rel="noopener noreferrer"&gt;on github&lt;/a&gt;&lt;br&gt;
There is a npx one liner&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @smithery/cli &lt;span class="nb"&gt;install &lt;/span&gt;mcp-obsidian &lt;span class="nt"&gt;--client&lt;/span&gt; claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This automatically updates the config in Claude desktop and allows it to run the latest version of the mcp-obsidian server.  Claude asks for the path to your Obsidian database, gets restarted and.....&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix a clash with another mcp server
&lt;/h2&gt;

&lt;p&gt;...Trying simple queries against  mcp-obsidian server didn't work for me!&lt;/p&gt;

&lt;p&gt;It kept failing and saying it couldn't find the files in a list of paths that didn't include the Obsidian database path&lt;/p&gt;

&lt;p&gt;I worked out that what was happening is that the previously installed &lt;a href="https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem" rel="noopener noreferrer"&gt;"filesystem" mcp server which Anthropic give as an example&lt;/a&gt; was used as the basis of the mcp-obsidian server and this causes clashes&lt;/p&gt;

&lt;p&gt;I removed the filesystem mcp server and Obsidan was then available&lt;/p&gt;

&lt;h2&gt;
  
  
  What it can do
&lt;/h2&gt;

&lt;p&gt;I found a useful prompt was 'using the mcp-obsidian MCP server, summarise activity in the Journal'&lt;br&gt;
Obsidian has a "Journal" feature for a daily record of activities&lt;br&gt;
Part of the output summarised what I have been doing and categorised it.&lt;br&gt;
With day to day work it is easy to loose track of what the themes are so this was helpful&lt;/p&gt;

&lt;blockquote&gt;
&lt;h1&gt;
  
  
  Journal Activity Summary
&lt;/h1&gt;

&lt;p&gt;Based on my analysis of your journal entries from late April to early May 2025, here's a summary of your activity:&lt;/p&gt;
&lt;h2&gt;
  
  
  Journal Structure
&lt;/h2&gt;

&lt;p&gt;Your journal is well-organized with a consistent format that includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A date header and status section listing ongoing tasks and projects&lt;/li&gt;
&lt;li&gt;A "Today" section with specific tasks accomplished that day&lt;/li&gt;
&lt;li&gt;Time tracking for workday start/finish and lunch breaks&lt;/li&gt;
&lt;li&gt;Navigation links to previous and next days&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Key Work Areas
&lt;/h2&gt;
&lt;h3&gt;
  
  
  AWS &amp;amp; Cloud Infrastructure
&lt;/h3&gt;

&lt;p&gt;You've been working extensively on AWS infrastructure tasks including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transit gateway configurations for network connectivity between environments&lt;/li&gt;
&lt;li&gt;Troubleshooting network paths between different environments (especially customer c9 qualifications)&lt;/li&gt;
&lt;li&gt;Implementing and fixing security configurations (IMDSv2)&lt;/li&gt;
&lt;li&gt;Infrastructure qualification (IQ) processes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Monitoring &amp;amp; Observability
&lt;/h3&gt;

&lt;p&gt;A significant focus area appears to be implementing monitoring solutions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up Prometheus and Grafana for monitoring&lt;/li&gt;
&lt;li&gt;Working on a "prometheus plan 2" with exporters and systemd configurations&lt;/li&gt;
&lt;li&gt;Configuring paths between exporters, Prometheus, and Grafana&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  System Administration
&lt;/h3&gt;

&lt;p&gt;Regular administrative tasks include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server maintenance and patching schedules&lt;/li&gt;
&lt;li&gt;System upgrades (Ubuntu 22.04/24.05)&lt;/li&gt;
&lt;li&gt;Authentication issues (SSSD configuration fixes)&lt;/li&gt;
&lt;li&gt;Access management for team members&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Support &amp;amp; Troubleshooting
&lt;/h3&gt;

&lt;p&gt;You provide regular support on issues like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Oracle database access problems&lt;/li&gt;
&lt;li&gt;Application performance investigations&lt;/li&gt;
&lt;li&gt;Infrastructure qualification failures&lt;/li&gt;
&lt;li&gt;Authentication and access issues&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  what next
&lt;/h2&gt;

&lt;p&gt;I suppose I had better have a go at fixing the clash with the filesystem mcp server&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
      <category>obsidian</category>
    </item>
    <item>
      <title>Using AWS Model Context Protocol awslabs-cost-analysis-mcp-server</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Mon, 07 Apr 2025 16:35:01 +0000</pubDate>
      <link>https://dev.to/vorsprung/using-aws-model-context-protocol-awslabs-cost-analysis-mcp-server-3hcd</link>
      <guid>https://dev.to/vorsprung/using-aws-model-context-protocol-awslabs-cost-analysis-mcp-server-3hcd</guid>
      <description>&lt;p&gt;I've recently started using Claude Pro on the desktop.  It can do a lot of things like simple coding and producing readable reports from data&lt;/p&gt;

&lt;p&gt;I was interested to learn about the Model Context Protocol recently.  To greatly simplify what it does, it pushes external data into prompts&lt;/p&gt;

&lt;p&gt;With this crude method it seems possible that LLMs can be interoperable across differing corporate software, across different types of interface and could be a rosetta stone for a new dawn of one thing speaking to another&lt;/p&gt;

&lt;p&gt;I saw that AWS had a new set of MCP servers available, including one that dealt with billing and cost.  I am interested in the costs so I did a quick try out.  TDLR; this is not a new dawn&lt;/p&gt;

&lt;h2&gt;
  
  
  step one, get the MCP server running
&lt;/h2&gt;

&lt;p&gt;The information to get the MCP server running with Claude Desktop was scanty but here is a recipe that worked for me (on a Mac)&lt;/p&gt;

&lt;p&gt;Do this in the shell.  The uv thing is required.  uv does some package management plus there is a uvx command that we need in the next step&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install uv
uv python install 3.13
uv venv
source .venv/bin/activate
uv init costly
cd costly
uv add "mcp[cli]" httpx
pip install awslabs-cost-analysis-mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do this in Claude Desktop -&amp;gt; settings -&amp;gt; developer -&amp;gt; edit config.   The edit config for me opened vscode.  Remove the empty braces and add the below.  I have nothing in the MCP_SETTINGS_PATH.  I really do have a AWS profile called &lt;code&gt;Hauptsteuerung&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "mcpServers": {
      "awslabs.core-mcp-server": {
        "command": "uvx",
        "args": [
          "awslabs.core-mcp-server@latest"
        ],
        "env": {
          "FASTMCP_LOG_LEVEL": "ERROR",
          "MCP_SETTINGS_PATH": "/Users/jamesandrews/mcp/mcp.json"
        },
        "autoApprove": [],
        "disabled": false
      },
      "awslabs.cost-analysis-mcp-server": {
        "command": "uvx",
        "args": [
          "awslabs.cost-analysis-mcp-server@latest"
        ],
        "env": {
          "AWS_PROFILE": "Hauptsteuerung",
          "FASTMCP_LOG_LEVEL": "ERROR"
        }
      }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now in the Claude window there is an extra icon that looks like a hammer. If I click on it it gives some info on the new MCP things I have installed&lt;/p&gt;

&lt;h2&gt;
  
  
  prompting - hot or not
&lt;/h2&gt;

&lt;p&gt;Here's where it all goes wrong.  I added an export file of our RDS servers.&lt;br&gt;
The phrase &lt;code&gt;get_pricing_from_api service_code=AmazonRDS&lt;/code&gt; should get Claude to use the MCP to get the current up to date data from AWS api!  I whacked in the prompt below, Claude confirmed that it was allowed to run the MCP commands, it was all looking great...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;the rdsapr2.csv file has the name of the RDS in column 2, region in column 4 and the instance size in column 5

using get_pricing_from_api service_code=AmazonRDS and the regions available in the rdsapr2.csv file, generate a report of the relative cost of each RDS instance in the rdsapr2 file

I need to compare the no upfront 1 year RI vs. on demand cost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the result it came out with&lt;/p&gt;




&lt;h1&gt;
  
  
  RDS Instances Pricing Analysis
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Regional Distribution
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Region&lt;/th&gt;
&lt;th&gt;Number of Instances&lt;/th&gt;
&lt;th&gt;Percentage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;us-east-1&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;55.07%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eu-west-1&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;18.84%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eu-central-1&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;10.14%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eu-west-2&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;8.70%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ap-southeast-1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4.35%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;us-west-2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2.90%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;69&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pricing Insights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  On-Demand vs Reserved Instance Cost Comparison
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Instance Type&lt;/th&gt;
&lt;th&gt;On-Demand Hourly Rate&lt;/th&gt;
&lt;th&gt;1-Year No Upfront RI Rate&lt;/th&gt;
&lt;th&gt;Potential Savings&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;db.t2.micro (MariaDB)&lt;/td&gt;
&lt;td&gt;$0.017&lt;/td&gt;
&lt;td&gt;Not significant&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;db.m5d.xlarge (Oracle SE2)&lt;/td&gt;
&lt;td&gt;$0.805&lt;/td&gt;
&lt;td&gt;$0.576&lt;/td&gt;
&lt;td&gt;28.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;db.t3.2xlarge (MySQL)&lt;/td&gt;
&lt;td&gt;$1.088&lt;/td&gt;
&lt;td&gt;$0.765&lt;/td&gt;
&lt;td&gt;29.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;db.r5.12xlarge (Oracle EE)&lt;/td&gt;
&lt;td&gt;$11.184&lt;/td&gt;
&lt;td&gt;$6.469&lt;/td&gt;
&lt;td&gt;42.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;db.z1d.12xlarge (SQL Server SE)&lt;/td&gt;
&lt;td&gt;$20.513&lt;/td&gt;
&lt;td&gt;$19.385&lt;/td&gt;
&lt;td&gt;5.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;db.x2iedn.16xlarge (MySQL)&lt;/td&gt;
&lt;td&gt;$35.533&lt;/td&gt;
&lt;td&gt;$27.360&lt;/td&gt;
&lt;td&gt;23.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Cost Optimization Recommendations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Regional Consolidation&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- 55% of instances are in us-east-1
- Consider consolidating or optimizing multi-region deployments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Instance Type Analysis&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- High variation in instance sizes and types
- Recommend comprehensive utilization review
- Potential for significant cost savings through right-sizing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reserved Instance Strategy&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Most instance types offer 20-40% savings with 1-year No Upfront RIs
- Evaluate workload stability for potential RI purchases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Database Engine Considerations&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Mix of engines: Oracle, MySQL, SQL Server, MariaDB
- Licensing costs vary significantly
- Review BYOL vs. included license models
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Detailed Observations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lowest Cost Instance&lt;/strong&gt;: db.t2.micro (MariaDB) at $0.017/hour&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highest Cost Instance&lt;/strong&gt;: db.z1d.12xlarge (SQL Server SE) at $20.513/hour&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Most Common Region&lt;/strong&gt;: us-east-1 with 38 instances&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Least Utilized Region&lt;/strong&gt;: us-west-2 with 2 instances&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Conduct a comprehensive audit of current RDS instances&lt;/li&gt;
&lt;li&gt;Create a detailed utilization report&lt;/li&gt;
&lt;li&gt;Develop a rightsizing and cost optimization strategy&lt;/li&gt;
&lt;li&gt;Consider Reserved Instance purchases for stable workloads&lt;/li&gt;
&lt;li&gt;Implement tagging for better cost tracking and allocation&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Which is great except&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I have no MariaDB&lt;/li&gt;
&lt;li&gt;I have no db.z1d.12xlarge instances, not even one&lt;/li&gt;
&lt;li&gt;Most of my servers are postgresql which isn't mentioned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I queried this and&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;what is the name of the db.z1d.12xlarge server mentioned in the csv file?

Edit

I'll retrieve the name of the db.z1d.12xlarge server from the CSV file.

Analysis

I apologize, but it seems that there might be no db.z1d.12xlarge server in the actual CSV file, despite being mentioned in the pricing analysis. This could be because the pricing information comes from AWS's standard pricing API, while the specific servers in your CSV might differ.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So not quite got it doing any useful work yet but maybe some day soon :)&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>claude</category>
    </item>
    <item>
      <title>Interviews - the problems and a solution</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Fri, 29 Jul 2022 12:27:44 +0000</pubDate>
      <link>https://dev.to/vorsprung/interviews-the-problems-and-a-solution-25i2</link>
      <guid>https://dev.to/vorsprung/interviews-the-problems-and-a-solution-25i2</guid>
      <description>&lt;h2&gt;
  
  
  What was the point in all that?
&lt;/h2&gt;

&lt;p&gt;Does the process CV + interviews = a suitable happy person working?&lt;br&gt;
Clearly in the imperfect world we live in, no&lt;br&gt;
Here are some random thoughts about it.  Enjoy&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 1: Sell yourself
&lt;/h2&gt;

&lt;p&gt;It makes the process into a sales process.  There is an incentive from the employee side to exaggerate the CV skills.  There is an incentive to reduce risk by just walking away from the employer side&lt;br&gt;
Treating potential employees as commodities to be bought is not a great way to get engagement from those employees&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 2: First impressions
&lt;/h2&gt;

&lt;p&gt;First impressions are often wrong but everyone uses them&lt;br&gt;
All those studies that show assessments of people are made from literally first impressions are true &lt;a href="https://www.psychologytoday.com/gb/blog/am-i-right/201302/the-power-first-impressions#:%7E:text=First%20impressions%20matter%2C%20for%20good,The%20halo%20effect%20distorts%20reality" rel="noopener noreferrer"&gt;https://www.psychologytoday.com/gb/blog/am-i-right/201302/the-power-first-impressions#:~:text=First%20impressions%20matter%2C%20for%20good,The%20halo%20effect%20distorts%20reality&lt;/a&gt;.&lt;br&gt;
People in HR are not immune.  Having a checklist is not a vaccine against it&lt;br&gt;
Making a meeting with first impressions part of the process means that this is going to be a problem&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 3: Experience is difficult to assess
&lt;/h2&gt;

&lt;p&gt;Technical skills assessments are not for what you actually know from your experience.  They are “can you do the puzzle”.  In a sense they assess your willingness to jump through hoops.  Famously the creator of the Mac “homebrew” system - used by Google internally and countless others couldn’t get a job at Google as he didn’t pass the merry go round of interviews.  Here’s a link to the story &lt;br&gt;
&lt;a href="https://www.quora.com/Whats-the-logic-behind-Google-rejecting-Max-Howell-the-author-of-Homebrew-for-not-being-able-to-invert-a-binary-tree" rel="noopener noreferrer"&gt;https://www.quora.com/Whats-the-logic-behind-Google-rejecting-Max-Howell-the-author-of-Homebrew-for-not-being-able-to-invert-a-binary-tree&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 4: Put on an act
&lt;/h2&gt;

&lt;p&gt;It’s too easy to put on an act of being a nice person&lt;br&gt;
Culture tests are either psychometric multiple choice tests or informal assessments.  I won’t discuss psychometric tests and their issues but clearly informal assessments are prone to “give them what they want”&lt;br&gt;
As I discussed in the previous articles in the series the "values" that companies have can be easy to claim for your own in words only.  Real values are based on actions&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 5: Money vs. work
&lt;/h2&gt;

&lt;p&gt;The fundamental employer employee power relation problem is: they want the most work for the least amount of wage.  You want the highest wages for the moderate amount of work.&lt;br&gt;
This doesn’t just apply to time/money.  You might want to work on the latest technology but the fact is with most companies the $$$ is in legacy systems.  In many areas the employer and the employee are at odds on what the aims are.  I won’t go into the wider social / economic reasons why this is the case, but it is&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem 6: Who are the hiring people?
&lt;/h2&gt;

&lt;p&gt;Another problem is that many of the people you meet on your hiring journey are not the people who will be directly shaping your working environment.  The head of Cloud or the HR person will not be your peer or line manager&lt;br&gt;
Those people you clicked with in the interview, they are not your manager or co workers&lt;/p&gt;

&lt;h2&gt;
  
  
  A Solution:
&lt;/h2&gt;

&lt;p&gt;Many people I know seem to agree that the best way to get a job is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Someone you know and trust works there, they explain the ups and downs&lt;/li&gt;
&lt;li&gt;You agree that on balance it might be fun&lt;/li&gt;
&lt;li&gt;Your inside contact helps you get the role, often bypassing the normal cv/interview thing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/File:Pieter_Bruegel_the_Elder_-_The_Tower_of_Babel_(Vienna)_-_Google_Art_Project_-_edited.jpg" rel="noopener noreferrer"&gt;image credit: Pieter Brueghel the Elder: The Tower of Babel&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Interviews ... and how to survive them</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Wed, 27 Jul 2022 17:26:47 +0000</pubDate>
      <link>https://dev.to/vorsprung/interviews-and-how-to-survive-them-12p6</link>
      <guid>https://dev.to/vorsprung/interviews-and-how-to-survive-them-12p6</guid>
      <description>&lt;h2&gt;
  
  
  Types of interviewers and interviews
&lt;/h2&gt;

&lt;p&gt;So you have been offered an interview, formal or informal.  It’s a chance to talk to a person.&lt;br&gt;
Types of people you will be dealing with: hiring managers, team members, recruiters&lt;/p&gt;

&lt;p&gt;Recruiters, as discussed before are not technically savvy but know more about the business need for this role than you do.&lt;br&gt;
Usually, there is an “initial chat” with a recruiter to screen out clearly unsuited people.  Aim to get information from the recruiter about the next few stages, “what they are looking for” in general terms and convince them that you are not crazy.&lt;br&gt;
Next, there will be a technical interview probing what you know.  These vary a lot in format, depth and scope&lt;br&gt;
There might be a “practical” technical interview, like pair programming or a takeaway program.  This is often with a team member&lt;br&gt;
Last, there is a “culture” or “behavioural” interview, often with a manager of some sort.&lt;/p&gt;

&lt;p&gt;With &lt;em&gt;all&lt;/em&gt; of these, you &lt;em&gt;must&lt;/em&gt; prepare.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparation
&lt;/h2&gt;

&lt;p&gt;The Initial chat is usually with a recruiter.  Preparation is - get ready to talk about yourself and your achievements.  Don’t complain about your current role.  Do have a reason you are leaving.  Do have a reason why you think you’d like the role.  These types of initial chats are usually quite easy if you have covered all the requirements in your cover letter.&lt;br&gt;
Sometimes the initial chat is not with a recruiter but is a technical conversation or even a cultural assessment.  If you think this is the case, prepare accordingly.&lt;/p&gt;

&lt;p&gt;For either of these subsequent interviews, technical or cultural gather clues from the interview request email, linkedin search the person who will be interviewing you, look at the job description and make notes in any prior interview.  It could be that you have worked at the same company at some point and something like that will help establish rapport&lt;/p&gt;

&lt;p&gt;If the interview email says “we will discuss your CV” think of a way to explain recent roles as if they are ideal preparation for this role&lt;/p&gt;

&lt;p&gt;For technical interviews: Anything that is mentioned, make it fresh in your mind.  For example, they mention terraform, take a moment to review a terraform 101 or a cheat sheet.  &lt;/p&gt;

&lt;p&gt;If the technical interview includes some kind of quick coding test, then practice coding in the language they mention.  I made this exact mistake in a recent interview.  I had been writing terraform code maybe two weeks before but mainly using EKS (AWS Kubernetes) providers.  The test code (which was supplied up front that I didn't read) was for AWS but with making a VPC from scratch with EC2 in it.  I was so clumsy and slow with this that the interviewer said "have you ever used terraform before"?  &lt;/p&gt;

&lt;p&gt;If the role is suited to you, (for example in my case it is SRE) but it is in an area where you don’t have much experience ie Machine Learning then look for talks or papers from conferences that home in on this exact area - in my example SRE for machine learning.  Often talks at conferences have a nice diagram or summary about how it works, get this straight in your mind.  I’m not saying this is a shortcut for learning stuff overnight!  But the process of explaining a composite topic that you perhaps have not explained for a while is worth going over.  There isn’t unlimited time in an interview so there isn’t any need to become an expert overnight&lt;/p&gt;

&lt;p&gt;For culture interviews, look for company “values”.  This is a thing, apparently.  Find them, understand them and prepare answers for value-based questions.   For example, if one of the values is “Value customers” a possible question would be “tell me a time when you went the extra mile for a customer”&lt;/p&gt;

&lt;p&gt;Most interviews are on line now - I won't cover zoom etiquette apart from: Immediately before the interview set an alarm so you are on time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pro tip:  Prepare for those "interview" questions
&lt;/h2&gt;

&lt;p&gt;As well as technical knowledge there are “interview questions” like “what is your greatest achievement?”.  You only hear these questions in interviews. I can’t answer that cold.  So I find a list, do answers to them all and write them down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pro tip: Questions you ask them!
&lt;/h2&gt;

&lt;p&gt;The other sort of question is the question you ask them.  My two favourites are “why are you hiring for this role?” and “describe the first 30/60/90 days, how quickly do you expect people to be productive”.  Whatever questions you ask, you will learn more about the role&lt;br&gt;
You need at least 5 of these questions to ask that suit the role and be ready to ask them when there is an opportunity.  Some of the questions will be answered by the rest of the conversation you’ve had.   If you get to the 2 minutes at the end of the interview that are “for questions” and you say “er, I have no questions” it isn’t a good look.  Here is a list &lt;a href="https://arc.dev/developer-blog/questions-to-ask-at-an-interview/" rel="noopener noreferrer"&gt;https://arc.dev/developer-blog/questions-to-ask-at-an-interview/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens next
&lt;/h2&gt;

&lt;p&gt;If you pass the interview then your reward is usually more interviews.  Hopefully, you will get to the point where there isn’t another interview&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amtec.us.com/creative-commons" rel="noopener noreferrer"&gt;Photo credit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>interview</category>
      <category>career</category>
    </item>
    <item>
      <title>How to get an interview</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Tue, 26 Jul 2022 09:24:22 +0000</pubDate>
      <link>https://dev.to/vorsprung/how-to-get-an-interview-34o9</link>
      <guid>https://dev.to/vorsprung/how-to-get-an-interview-34o9</guid>
      <description>&lt;h2&gt;
  
  
  How to get an interview in the first place
&lt;/h2&gt;

&lt;p&gt;I won’t cover where to search for suitable roles.  I used linkedin, my favourite recruitment agents and hired.com.   I’m sure you have a bunch of places to get leads.  That’s not what I am going to write about here!&lt;/p&gt;

&lt;p&gt;So, step one: you have a job description, you like the look of it and you feel that you are in with a chance.  What nearly all of them want is a CV and a cover letter.&lt;/p&gt;

&lt;p&gt;This CV and cover letter will go to a recruiter person or an automated process that is used by the recruiter person&lt;br&gt;
So the initial point of contact is this recruiter person or an automation.   Most automations look for keywords in the list it has for the job role that goes with the application.  Most recruiters are more perceptive than the automated process but essentially are doing the same thing, looking for key skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  CV tips
&lt;/h2&gt;

&lt;p&gt;So your CV has to mention those keywords and mention them in a fairly obvious way&lt;br&gt;
The CV should also list your “achievements” by which I mean you say I was at company X and I did a thing and it had this positive effect.  I was at Voodoo Corp, I took charge of the AWS infrastructure and reduced the bill for infrastructure by 20%.   List things that the non-technical recruiter will understand and link them to business requirements.  In DevOps speak, shift left :)&lt;br&gt;
Be sure to list all your certifications.  Certifications seem fairly pointless but the CV is their raison d’etre.  All a certification does is prove that you can do a thing to a certain standard to people who don’t know you, exactly the context of a CV&lt;br&gt;
If you struggle to make the CV look good and keep it up to date then I recommend &lt;a href="https://www.kickresume.com/en/pricing/" rel="noopener noreferrer"&gt;Kick Resume&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cover letter cheat sheet
&lt;/h2&gt;

&lt;p&gt;The cover letter is probably something I could do better but I have a simple formula.&lt;br&gt;
1/ “Hello, I think we should talk”  or “Hi I noticed your job ad and I believe I have something to offer”   - make a friendly introduction, try and give something positive&lt;br&gt;
2/ Pitch with 3 quick points (you like the idea, you are suitable and you want to do the job) “I am currently in the SRE field and Goats have always fascinated me, so when I saw you advertising for an SRE at Goats R Us I was immediately interested.  I have many years of experience (see below) and I am actively looking for a new challenge”&lt;br&gt;
3/ The job description always has a list of “requirements” or “what we are looking for”.  Cut n paste this into the letter and fill in after each requirement what your experience is.  If you don’t have experience in one of the areas, just skip it.&lt;br&gt;
4/ End with: Thanks for reading, hope to hear from you soon&lt;br&gt;
This method for doing a cover letter takes a little while as you have to fill in the requirements&lt;/p&gt;

&lt;h2&gt;
  
  
  what happens next
&lt;/h2&gt;

&lt;p&gt;Send the CV/Cover letter off&lt;br&gt;
If nothing happens don’t worry about it. Sometimes the recruiter person is on holiday.  Sometimes they filled the role and didn’t pull the Ad and can’t be bothered to reply.  If you never hear from them again, no problem!&lt;/p&gt;

&lt;p&gt;If you do get an interview…your troubles have just begun&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amtec.us.com/creative-commons" rel="noopener noreferrer"&gt;Photo credit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>interview</category>
      <category>career</category>
    </item>
    <item>
      <title>VSCode, pipenv, python</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Thu, 16 Dec 2021 09:32:31 +0000</pubDate>
      <link>https://dev.to/vorsprung/vscode-pipenv-python-34pf</link>
      <guid>https://dev.to/vorsprung/vscode-pipenv-python-34pf</guid>
      <description>&lt;h1&gt;
  
  
  Python squeezes until the pipenv squeeks
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The problem I have
&lt;/h2&gt;

&lt;p&gt;I don't use python a lot and although I have all the VSCode plugins for python installed, when I load a project up, there are lots of "Problems" about missing python libraries.  "unable to import"&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0y9l2etseougcs2uu3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0y9l2etseougcs2uu3y.png" alt="..and the problem is" width="800" height="47"&gt;&lt;/a&gt;&lt;br&gt;
The project works fine in the shell, I can run tests and all the things.  All of the projects use pipenv&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd like
&lt;/h2&gt;

&lt;p&gt;I want the missing python library warnings to disappear so I can use the "Problems" pane to find...er...real problems with the code&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem with some online info
&lt;/h2&gt;

&lt;p&gt;It seems (and I vaguely remember doing this in the past) it used to be the case that setting the pythonpath in the settings would fix this issue to a great extent.  But now this does not work and the setting is marked as "deprecated"&lt;/p&gt;

&lt;h2&gt;
  
  
  VSCode official docs
&lt;/h2&gt;

&lt;p&gt;The official docs for &lt;a href="https://code.visualstudio.com/docs/python/environments" rel="noopener noreferrer"&gt;"Using Python environments in VS Code"&lt;/a&gt; are pretty good but they don't give an exact method for using pipenv.  There are some good clues however.  It seems that the key is to make a venv in the file folder .venv in the Project.&lt;/p&gt;

&lt;h2&gt;
  
  
  pipenv work around
&lt;/h2&gt;

&lt;p&gt;This work around is good for Linux or a Mac.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;go to the project directory in a shell.  This can be any shell on the host, including the vscode terminal&lt;/li&gt;
&lt;li&gt;ensure that no virtual environment is in effect.  The &lt;code&gt;deactivate&lt;/code&gt; command can stop a virtual environment&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PIPENV_VENV_IN_PROJECT=1 pipenv shell&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;say yes when VSCode asks "add this environment?"
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fox1zbnxip5u93ehtkkf3.png" alt="We noticed a new virtual environment..." width="647" height="149"&gt;
&lt;/li&gt;
&lt;li&gt;probably at this point you need to do &lt;code&gt;pipenv update&lt;/code&gt;  For projects with lots of dependencies, this will take a while&lt;/li&gt;
&lt;li&gt;do a ⇧ ⌘ P "Developer: Reload Window"&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If you still have missing libraries....
&lt;/h2&gt;

&lt;p&gt;I found that the project - as well as having a Pipfile - had a library in a "vendor" folder!  To fix this make a file in the project directory called .env with the contents &lt;code&gt;PYTHONPATH=vendor&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the folder has a different name to "vendor" set that in pythonpath&lt;/p&gt;

</description>
      <category>python</category>
      <category>vscode</category>
      <category>pipenv</category>
    </item>
    <item>
      <title>Small Wins for 2021</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Wed, 15 Dec 2021 13:46:36 +0000</pubDate>
      <link>https://dev.to/vorsprung/small-wins-for-2021-31f8</link>
      <guid>https://dev.to/vorsprung/small-wins-for-2021-31f8</guid>
      <description>&lt;h1&gt;
  
  
  Small Wins for 2021
&lt;/h1&gt;

&lt;h2&gt;
  
  
  My small wins!
&lt;/h2&gt;

&lt;p&gt;Here's a list of the things that I did or learnt last year that were not earth shatteringly amazing points in my career - most of them aren't that important or memorable.  But that's a great reason to record them&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp53973vr6vvvp73llhzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp53973vr6vvvp73llhzx.png" alt=" " width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why keep this list?
&lt;/h2&gt;

&lt;p&gt;Keeping a list like this helps with self esteem, counters imposter syndrome and helps show a realistic view of the things you've learnt.  The next time you have a bad day and think "I can't learn anything!  Why am I so behind on the latest tech?" take a look at your small wins list and it will put it in perspective.  Maybe you aren't a thought leader or incredible creative- but you have done plenty of stuff!&lt;/p&gt;

&lt;h2&gt;
  
  
  Make this a New Year's resolution!
&lt;/h2&gt;

&lt;p&gt;Why not start a list like this?  I've had mine since 2017!  It can help you with your motivation and it's a great resource if you have a review or assessment&lt;/p&gt;

</description>
      <category>idorecall</category>
      <category>2021</category>
      <category>impostersyndrome</category>
    </item>
    <item>
      <title>How I didn't get a DevOps job for Xmas</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Fri, 20 Dec 2019 14:12:32 +0000</pubDate>
      <link>https://dev.to/vorsprung/how-i-didn-t-get-a-devops-job-for-xmas-6hf</link>
      <guid>https://dev.to/vorsprung/how-i-didn-t-get-a-devops-job-for-xmas-6hf</guid>
      <description>&lt;h1&gt;
  
  
  How I didn't get a DevOps job for Xmas
&lt;/h1&gt;

&lt;p&gt;At the end of November, I had an awkward call with my line manager at the place I was working. They had decided to lay me off as a remote worker and hire someone  at their base&lt;/p&gt;

&lt;p&gt;The remote working communications had been not great. They were a small company not used to dealing with remote staff. The culture was based around the one office&lt;/p&gt;

&lt;p&gt;It had been a cool place to work but I agreed that it was time to look for something else&lt;/p&gt;

&lt;p&gt;Shouldn't be too hard right? I am an experienced DevOps/Systems Admin/Developer specialising in systems automation, software-controlled infrastructure, CI/CD pipes. I've got strong Python, Linux admin and a supporting cast of dozens of practices and technologies from many years of experience&lt;/p&gt;

&lt;p&gt;I'd prefer remote but I live in commute distance of Bristol in the UK which is a great tech centre&lt;/p&gt;

&lt;h2&gt;
  
  
  First few attempts
&lt;/h2&gt;

&lt;p&gt;Pretty much the next day after the call I was looking at all the places I normally look for jobs. My CV was, as always, up to date. I use the excellent &lt;a href="http://www.kickresume.com" rel="noopener noreferrer"&gt;kick resume&lt;/a&gt; site to manage it&lt;/p&gt;

&lt;p&gt;I did have to reinstate the details&lt;br&gt;
on LinkedIn. I'd removed them to lessen the amount of spam I get from recruiters. Now, however, I would be fine to get recruiter emails. More about that later&lt;/p&gt;

&lt;p&gt;Initially, I applied to a couple of places. A local consultancy where a friend already worked - giving me glowing reviews about it&lt;br&gt;
And a company I'd not heard of before, UK based, who specialised in secure communications for distributed workers&lt;/p&gt;

&lt;p&gt;How these things work is that you apply with a CV and cover letter. Then if you get through screening there is an initial call from someone non-technical (maybe in HR if they have that) just to check that you aren't completely nuts&lt;/p&gt;

&lt;p&gt;I got through the initial call phase with both of the above easily&lt;/p&gt;

&lt;p&gt;Next, all the companies have a second layer - either an interview, a technical challenge or something else.&lt;/p&gt;

&lt;p&gt;The secure comms company came up with something else. They had an automated video interview system. It asked questions, gave you thinking time and then you recorded an answer&lt;/p&gt;

&lt;p&gt;The consultancy went for a technical task, which they said should take 6 or 7 hours. When I read it I thought "Well maybe, if everything goes swimmingly that's 7 hours" Of course it didn't and I spent the entire weekend building a CI/CD pipeline&lt;/p&gt;

&lt;p&gt;Of the companies that use a technical task as part of their process, it's usual to then use this as the basis for a further meeting.&lt;/p&gt;

&lt;p&gt;So I was lined up to be grilled by 4 developers and managers in the team I was going to be hired in. Just before the Google Hangout, both of my Bluetooth headsets refused to pair with the laptop and I noticed a bug in the implementation I'd done. I started the interview flustered and didn't really recover. At one point they asked me what stuff was in the VPC I'd set up - a real 101 question which I failed to answer at all convincingly&lt;/p&gt;

&lt;p&gt;So that was a turndown and they were left with the impression that, actually, I don't know much about AWS&lt;/p&gt;

&lt;p&gt;The secure comms people didn't get back to me for a while. When I contacted them they'd hired someone cheaper instead&lt;/p&gt;

&lt;p&gt;Then I had a weeks holiday booked abroad so I had a week off&lt;/p&gt;

&lt;h2&gt;
  
  
  Round two
&lt;/h2&gt;

&lt;p&gt;Refreshed by winter sun I really got on the case when I returned&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There's a data science company local to me. &lt;/li&gt;
&lt;li&gt;There's an opening where I used to work.&lt;/li&gt;
&lt;li&gt;There's an interesting sounding startup offering fully remote.
Apply to all of them!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An email comes in from a contact saying yes, our company is hiring&lt;br&gt;
fill in the form, please.&lt;/p&gt;

&lt;p&gt;I contacted my favourite two recruiters &lt;a href="//www.sr2rec.co.uk"&gt;SR2&lt;/a&gt; and &lt;a href="//www.techfolk.co.uk"&gt;Techfolk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both of them come up with some great ideas, one of which leads to an interview/ tech task/ another interview at a software company in Bristol&lt;/p&gt;

&lt;p&gt;Unlike the many recruitment agents who contacted me on Linkedin.  Most of them were offering roles in London and/or fintech. I also had a surprising number of direct approaches from companies abroad.  But I don't want to work in Sweden, Frankfurt or Dublin.&lt;/p&gt;

&lt;p&gt;After an intensive 2 weeks of zoom, tech tasks, phone calls and onsite interviews I have got to the "we will let you know" step with 4 companies.&lt;/p&gt;

&lt;p&gt;Another week and I should have an offer!  Maybe two!&lt;/p&gt;

&lt;h2&gt;
  
  
  Bust
&lt;/h2&gt;

&lt;p&gt;However, the two favourite ones both let me know that no, I wasn't for them.&lt;/p&gt;

&lt;p&gt;The other two are still pending but let's face it. The longer you wait the less likely a positive outcome is&lt;/p&gt;

&lt;p&gt;So no job for me!&lt;/p&gt;

&lt;h2&gt;
  
  
  What did I learn
&lt;/h2&gt;

&lt;p&gt;A few things of interest became apparent&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tech tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am usually not too bad at these. They are often a great learning opportunity as inevitably whoever you are hiring with will assume that their in house way is just obvious: but it will include at least one thing you never used&lt;/p&gt;

&lt;p&gt;Another potential problem is that they all assume that you can do frontend things easily. I am a backend only person so that's always a refreshing change&lt;/p&gt;

&lt;p&gt;If they say the task will take x hours then best realistic hope is that it will actually take x + 1&lt;/p&gt;

&lt;p&gt;Although one of the above was 2x + 1 &lt;/p&gt;

&lt;p&gt;Noone offers to pay you for what is essentially work in your own time&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Travel expenses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm sure that I used to get travel expenses for interviews? Not any more! Not offered by any of them&lt;/p&gt;

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

&lt;p&gt;Some of them offer "feedback". This is of little use in refining your offer and its main value is to offer closure. One said "there is a gap between working philosophies, methodologies and communication styles" which kind of means that we didn't like the way you talked.&lt;/p&gt;

&lt;p&gt;In a sense, the problem with feedback is the problem with the interview process itself. Interviews cannot, in a limited time, work out if you are any use. So also feedback, in a limited format cannot express the irrational decisions of the interview process&lt;/p&gt;

&lt;h2&gt;
  
  
  The upside
&lt;/h2&gt;

&lt;p&gt;So, no job to look forward to in the new year. But there is an upside. I have loads of time to learn cool new stuff! At the moment I am reading the papers from &lt;a href="https://twitter.com/therealdatabass/status/1201130813288599552?s=20" rel="noopener noreferrer"&gt;The Database Internals Advent Calendar&lt;/a&gt;, I've got the &lt;a href="https://github.com/windmilleng/tilt" rel="noopener noreferrer"&gt;Tilt&lt;/a&gt; system working with my Kubernetes toy project and I have a book on &lt;a href="http://lamport.azurewebsites.net/tla/tla.html" rel="noopener noreferrer"&gt;TLA+&lt;/a&gt; to work through&lt;/p&gt;

</description>
      <category>aws</category>
      <category>python</category>
      <category>interview</category>
    </item>
    <item>
      <title>Using AWS with Ansible but from Google Cloud</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Sat, 09 Nov 2019 17:40:49 +0000</pubDate>
      <link>https://dev.to/vorsprung/using-aws-with-ansible-but-from-google-cloud-52nl</link>
      <guid>https://dev.to/vorsprung/using-aws-with-ansible-but-from-google-cloud-52nl</guid>
      <description>&lt;h2&gt;
  
  
  What is the problem?
&lt;/h2&gt;

&lt;p&gt;Ansible on AWS can use server roles to very conveniently run playbooks with access to AWS resources&lt;br&gt;
Or if it’s from a “home” account, AWS creds in files work just fine.&lt;br&gt;
But ansible running remotely on non AWS (ie on prem, GCP, Oracle Cloud etc) then getting the credentials loaded can be a problem&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step one, ensure local creds in file
&lt;/h3&gt;

&lt;p&gt;Some credentials should already exist on your local host in the ~/.aws/credentials file.  All you have to do is convert those credentials into a format that ansible can load.&lt;/p&gt;

&lt;p&gt;Ansible AWS module is based on &lt;a href="https://aws.amazon.com/sdk-for-python/" rel="noopener noreferrer"&gt;boto3&lt;/a&gt; and so will honour environment variables AWS_SECRET_KEY_ID and AWS_ACCESS_KEY_ID.  Ansible can load variable files into environment variables: this  is path I’ve taken&lt;/p&gt;

&lt;p&gt;The file format in ~/.aws/credentials is like this&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="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;aws_access_key_id = AKIAXEX5OPTQQLXUAVL5&lt;/span&gt;
    &lt;span class="s"&gt;aws_secret_access_key = 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&lt;/span&gt;

    &lt;span class="s"&gt;[admin-account]&lt;/span&gt;
    &lt;span class="s"&gt;aws_secret_access_key = mzTh1Sj9Btjxucbq//X6Ece1z6U6XE3Cysb+Ntdm&lt;/span&gt;
    &lt;span class="s"&gt;aws_access_key_id = ASIAXEX3PUBILNYIJHAY&lt;/span&gt;
    &lt;span class="s"&gt;aws_session_token = sXiACeiyqiPpd5z2wAHvEtmTR7/GGf88yVCJ/epz3StU2cU0y1SJUKo6+gch&lt;/span&gt;
    &lt;span class="s"&gt;2YSsldTlsZzDEBSDubzGKtYur6rmzYZfq+v+KwrUbGobETwn1gvaNd4vg+kEaCg6eNhICisCMRHjrLfK&lt;/span&gt;
    &lt;span class="s"&gt;YdaikcP9SbUSqQPHwew/F5rtzyWwU5pEle+8uHfYycwY1sSHWOn4bnBA9IpiiJDonTKdnPjWdwuep2E9&lt;/span&gt;
    &lt;span class="s"&gt;pf7A3fxaPOCb+jss9CoI9YfzPLQ9CQSztqfdhqN4PxYvpXnLSms3Z6SB7cS&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The format needed for ansible is&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="s"&gt;---&lt;/span&gt;
    &lt;span class="s"&gt;env_vars&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mzTh1Sj9Btjxucbq//X6Ece1z6U6XE3Cysb+Ntdm&lt;/span&gt;
    &lt;span class="na"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ASIAXEX3PUBILNYIJHAY&lt;/span&gt;
    &lt;span class="na"&gt;AWS_SESSION_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sXiACeiyqiPpd5z2wAHvEtmTR7/GGf88yVCJ/epz3StU2cU0y1SJUKo6+gc&lt;/span&gt;
    &lt;span class="s"&gt;h2YSsldTlsZzDEBSDubzGKtYur6rmzYZfq+v+KwrUbGobETwn1gvaNd4vg+kEaCg6eNhICisCMRHjrLf&lt;/span&gt;
    &lt;span class="s"&gt;KYdaikcP9SbUSqQPHwew/F5rtzyWwU5pEle+8uHfYycwY1sSHWOn4bnBA9IpiiJDonTKdnPjWdwuep2E&lt;/span&gt;
    &lt;span class="s"&gt;9pf7A3fxaPOCb+jss9CoI9YfzPLQ9CQSztqfdhqN4PxYvpXnLSms3Z6SB7cS&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/vorsprung/awscredansible" rel="noopener noreferrer"&gt;AWScre.py in my github&lt;/a&gt; will do this conversion&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2, run the AWScre
&lt;/h3&gt;

&lt;p&gt;To use the program call it  with 3 parameters&lt;br&gt;
The credentials file path, usually $HOME/.aws/credentials&lt;br&gt;
An output path to be used later by ansible, for example awsvars.yml&lt;br&gt;
The account that is being used, for example ‘admin-account’&lt;/p&gt;

&lt;p&gt;The output path should be in the ansible directory so that it is available on the remote host&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3, use in Ansible playbooks
&lt;/h3&gt;

&lt;p&gt;Next, add a &lt;code&gt;vars_file&lt;/code&gt; directive to load the file you just made.  Add this to the playbook that needs to use AWS from GCP, like this&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="s"&gt;---&lt;/span&gt;

    &lt;span class="s"&gt;- hosts&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;
    &lt;span class="s"&gt;gather_facts&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;
    &lt;span class="s"&gt;become&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;
    &lt;span class="s"&gt;become_user&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;
    &lt;span class="s"&gt;vars_files&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;../awsvars.yml&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;env_vars&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The python script I’ve written to setup the AWS credentials also makes a tweak to the sudo settings on the remote to ensure that the variables are exported during the “become_user”.  So the output file that is used by ansible actually looks like this&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="s"&gt;---&lt;/span&gt;
    &lt;span class="s"&gt;env_vars&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;ANSIBLE_BECOME_FLAGS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;-H&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-S&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-n&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-E'&lt;/span&gt;
    &lt;span class="na"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mzTh1Sj9Btjxucbq//X6Ece1z6U6XE3Cysb+Ntdm&lt;/span&gt;
    &lt;span class="na"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ASIAXEX3PUBILNYIJHAY&lt;/span&gt;
    &lt;span class="na"&gt;AWS_SESSION_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sXiACeiyqiPpd5z2wAHvEtmTR7/GGf88yVCJ/epz3StU2cU0y1SJUKo6+gc&lt;/span&gt;
    &lt;span class="s"&gt;h2YSsldTlsZzDEBSDubzGKtYur6rmzYZfq+v+KwrUbGobETwn1gvaNd4vg+kEaCg6eNhICisCMRHjrLf&lt;/span&gt;
    &lt;span class="s"&gt;KYdaikcP9SbUSqQPHwew/F5rtzyWwU5pEle+8uHfYycwY1sSHWOn4bnBA9IpiiJDonTKdnPjWdwuep2E&lt;/span&gt;
    &lt;span class="s"&gt;9pf7A3fxaPOCb+jss9CoI9YfzPLQ9CQSztqfdhqN4PxYvpXnLSms3Z6SB7cS&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How well does it work?  Transferring software artifacts held in s3 from AWS to GCP was as fast as you’d expect, a few seconds for hundreds of MB&lt;/p&gt;

</description>
      <category>ansible</category>
      <category>gcp</category>
      <category>aws</category>
    </item>
    <item>
      <title>Why Serverless needs Ops</title>
      <dc:creator>vorsprung</dc:creator>
      <pubDate>Sat, 16 Mar 2019 09:28:03 +0000</pubDate>
      <link>https://dev.to/vorsprung/why-serverless-needs-ops-13a8</link>
      <guid>https://dev.to/vorsprung/why-serverless-needs-ops-13a8</guid>
      <description>&lt;p&gt;Dr Werner Voglers famously said, "No server is easier to manage than no server".  &lt;/p&gt;

&lt;p&gt;As he is the CTO of Amazon and so one of the people pushing the move to Serverless, you'd expect him to hold this view.&lt;/p&gt;

&lt;p&gt;But in many ways, he is right.  But this isn't the end of the story&lt;/p&gt;

&lt;h2&gt;
  
  
  What is software for?
&lt;/h2&gt;

&lt;p&gt;Serverless or a server is a platform to run software on.  It's worth remembering the things that are the purpose of software&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whatever it is your customers are paying you for&lt;/li&gt;
&lt;li&gt;Unique value, differentiation&lt;/li&gt;
&lt;li&gt;Making your product automated, scalable, 24x7&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And serverless can help with these&lt;/p&gt;

&lt;p&gt;Whatever it is your customers are paying you for - that can appear quicker in a more responsive way than with using servers&lt;/p&gt;

&lt;p&gt;The unique value, differentiation of the incredible software you are making should shine through - so let SaaS do the mundane stuff, you have more resource for specialization&lt;/p&gt;

&lt;p&gt;Making your product automated, scalable, 24x7 - this is one of real "batteries included" features of SaaS&lt;/p&gt;

&lt;h2&gt;
  
  
  How to manage servers
&lt;/h2&gt;

&lt;p&gt;To manage a server you need to be expert at these things&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Resilience&lt;/li&gt;
&lt;li&gt;Availability&lt;/li&gt;
&lt;li&gt;Maintainability&lt;/li&gt;
&lt;li&gt;Simplicity in complex systems&lt;/li&gt;
&lt;li&gt;Instrumentation and visibility&lt;/li&gt;
&lt;li&gt;Graceful degradation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Being an expert at these things is server operations.  Without these things your software isn't going to perform on a server&lt;/p&gt;

&lt;p&gt;But remember serverless, does away with servers.  And part of this is dealing with operational issues&lt;/p&gt;

&lt;h2&gt;
  
  
  The operations that Serverless includes 
&lt;/h2&gt;

&lt;p&gt;A great way of understanding the advantage of serverless is to see how it can usurp people doing server operations.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scalability - serverless does this automatically&lt;/li&gt;
&lt;li&gt;Resilience - the cloud infrastructure has resilience&lt;/li&gt;
&lt;li&gt;Availability - cloud is 24x7&lt;/li&gt;
&lt;li&gt;Maintainability - cloud infrastructure has good maintenance features&lt;/li&gt;
&lt;li&gt;Simplicity in complex systems - cloud products are simple and reliable&lt;/li&gt;
&lt;li&gt;Instrumentation and visibility - basic metrics are available&lt;/li&gt;
&lt;li&gt;Graceful degradation - can be implemented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, the serverless providers have teams of people doing this for you. And they can afford to hire the best people, due to economies of scale&lt;/p&gt;

&lt;p&gt;Serverless isn't magic, it's specialisation.&lt;/p&gt;

&lt;p&gt;Instead of you having to hire server operations people, this bit of work is supplied by the serverless provider.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why serverless isn't the end of the story for operations
&lt;/h2&gt;

&lt;p&gt;However, if we dig in a little deeper, often serverless still needs operations people&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Scalability - serverless does this automatically but within limits that must be understood.  For example, in AWS S3 there is a limit of &lt;a href="https://aws.amazon.com/about-aws/whats-new/2018/07/amazon-s3-announces-increased-request-rate-performance/" rel="noopener noreferrer"&gt;3500 put operations per bucket per second&lt;/a&gt;.  It's important to know the limits and understand the alternatives&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resilience - the cloud infrastructure has resilience usually as some “provision”.  For example with AWS DynamoDB, there is a cost limited option or a &lt;a href="https://aws.amazon.com/blogs/aws/amazon-dynamodb-on-demand-no-capacity-planning-and-pay-per-request-pricing/" rel="noopener noreferrer"&gt;"on demand"&lt;/a&gt; option that must be understood and set up&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Availability - cloud is 24x7, except for very unusual events.  For example in 2017, there was an &lt;a href="https://www.theregister.co.uk/2017/03/01/aws_s3_outage/" rel="noopener noreferrer"&gt;outage on AWS S3&lt;/a&gt;.  Even AWS itself was caught out by this as the service had previously been so reliable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintainability - cloud infrastructure has good maintenance features, use of which has to be planned.  For example, if using AWS API gateway as part of your stack, &lt;a href="https://aws.amazon.com/blogs/compute/using-api-gateway-mapping-templates-to-handle-changes-in-your-back-end-apis/" rel="noopener noreferrer"&gt;changes to the API have to be understood&lt;/a&gt; as a threat to stability and planned in ahead&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simplicity in complex systems - cloud products are simple and reliable.  But emergent behaviour is still there.  It's easy to add a microservice, and another, and another until there are many of them.  Microservices architectures have the services calling each other.  So to do some numbers, if each service has one input and one output and there are 10 of them and if they can be arbitrarily connected that's 9 factorial or 362880 different ways of connecting them.  In the real world, most of these combinations would be unsuitable but the possibility is still there for misconnecting things.  And when something like this does occur, it's down to you to find it, in production&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instrumentation and visibility - basic metrics are available.  But application specific metrics have to be added.   Going on from the example above with 10 cross-connected microservices, imagine how much easier it is to fix them if there is application level logging implemented for transactions.  Companies like &lt;a href="https://www.honeycomb.io/" rel="noopener noreferrer"&gt;Honeycomb&lt;/a&gt; have a business supplying this extra, necessary level of traceability in the applications that are implemented on serverless or PaaS systems - which show emergent behaviour but do not monitor everything out of the box&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Graceful degradation - can be implemented.  And this can be difficult.  The ideal form of graceful degradation is that valued customers got to use the part that is still working while the less important traffic is discarded.  Maybe someone better informed than me can suggest a pattern for doing this within serverless&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In summary: operational problems don't go away because you are running serverless!&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>operations</category>
    </item>
  </channel>
</rss>
