Skip to content

posts🔗

The Open Guide to Amazon Web Services

The guide you didn't know you needed for AWS. Came across this when Corey Quinn 2 mentioned this on a podcast.

This is a resource I wish I'd known about earlier. It covers the core essentials on services, and cuts through the confusion of the AWS Docs pretty well.

For example, I noticed the ELB references for ALB docs and this caused me some confusion.

Right front and center on Load Balancer Basics 1:

Before the introduction of ALBs, "Classic Load Balancers" were known as "Elastic Load Balancers" (ELBs), so older documentation, tooling, and blog posts may still reference "ELBs".

I'm going to make this a first stop when getting familar with new AWS concepts.

{{< admonition type="Tip" title="macOS lifehack" open="true">}}

If you have Dash installed, set the repo as a GitHub datasouce, and you can have the entire handbook cached offline as an offline documentation library.

{{< /admonition >}}

Cloudflare Analytics for Your Jamstack Site

A new alternative to Google Analytics if you want to keep things simple.

Cloudflare Web Analytics seems promising.

I'd probably have started with this if I was setting up my site from scratch.

The problem I have with adopting a tool like this is no basic import of metrics from Google Analytics means I'd lose years of history.

Does the history matter signficantly? Not really for me. I just don't like losing out the entire history to see how things have improved over time.

Make Vscode Annoy Me When I Make a Typo

Not sure why, but I've had 2 typos that keep plauging me.

  • ngnix should be nginx
  • chocolatey should be chocolatey

With Go, I get compile errors with typos, so no problem. With PowerShell or Bash, this can be really annoying and waste time in debugging.

You can configure many autocorrect tools on a system level, but I wanted a quick solution for making it super obvious in my code as I typed without any new spelling extensions.

Install Highlight: fabiospampinato.vscode-highlight 1

Configure a rule like this:

"highlight.regexes": {
    "(ngnix)": [
            {
                "overviewRulerColor": "#ff0000",
                "backgroundColor": "#ff0000",
                "color": "#1f1f1f",
                "fontWeight": "bold"
            },
            {
                "backgroundColor": "#d90000",
                "color": "#1f1f1f"
            }
        ],
}

Cool Way to Compare Features in Note Apps

Nice little site I came across for comparing various popular knowledge & note taking tools with ability to select features most important to you.

NoteApps

Note typically a fan of compare based tools, as they often feel like marketing junk, but this was a a pretty cool little implementation.

Azure Devops PR Automation Requires Generic Contribute

Big fan of renovate for terraform dependency management.

Ran into some complications with restarting an onboarding with Whitesource Renovate in Azure DevOps Repos and the Azure Pipeline automation. I've run into this before, so logging this for my sanity.

  • If you failed to onboard with Azure DevOps, you can't rename the PR like in GitHub to simplify restarting the onboarding process.
  • Instead, delete the renovate.json file and commit to your default branch.
  • Then re-add and get the renovate.json committed back to your default branch.
  • Run your Azure DevOps Pipeline to trigger the dependency assessment.
  • If you didn't add the project build service account to your repo with Contribute, Contribute to Pull Requests, Force Push (to allow force update of branches it creates), and Create Tag.

{{< admonition type="Tip" title="Where do you add the permissions for build?" open="true">}}

Go to your repository security settings (in this case I'm adding to all to simplify, but you can do on a repo by repo basis if you enjoy tedium):

https://dev.azure.com/MYORG/MYPROJECT/_settings/repositories?_a=permissions

Then in the search type your project name and you should see a PROJECTNAME\Build Service (PROJECTNAME) show up.

If you are using a custom service account with on-premise agents instead of hosted, then adjust your approach accordingly.

{{< /admonition >}}

Hackattic

Came across this pretty nifty site HackAttic that provides a small set of practical oriented exercises. Will look at using further in my Go journey, as seems really useful to stretch one's development skills in less familar, but still practical ways.

A few of the challenges:

  • Generate an SSL certificate according to given data.
  • Extract some data from Redis. In a way.
  • Handle some incoming JWTs for us.

Take a look at the newsletter topics covered. I love that sense of humor.

Diagrams as Code

Why

It's not for everyone.

I prefer to write diagrams out logically and then let the visual aspect be generated.

This helps me by making the visual presentation an artifact of what is basically a written outline.

Presentation Matters

I've learned that communicating flows of information can often be better presented visually than trying to write them out, especially once it involves more than a few "nodes" of responsibility. Visualizing a complicated process can be done more easily in a visual way, as well as help expose some possible issues when ownership is transfered between lanes too many times.

Options

LucidChart, Draw.io and other tools are great for a quick solution.

Mermaid also provides a nice simple text based diagramming tool that is integrated with many markdown tools.

For me, this just never fit. I like a bit of polish and beauty in a visual presentation and most of these are very utilitarian in their output.

I came across diagrams2 and found it a perfect fit for intuitive and beautiful diagram rendering of cloud architecture, and figured it would be worth a blog post to share this.

Getting Started

{{< admonition type="Warning" title="Name Of Project" open="true">}} Do not create a project named the same thing as your dependency, ie project name = diagrams for example.

This will error out and send you down a search in github issues to discover this issue.

{{< /admonition >}}

Install Poetry1 and create a new poetry project in your directory using poetry init.

Once it gets to the package additions add diagrams to your poetry file.

Run poetry install

Finally, create a new file called diagram.py in your directory.

Once you populate this file, you can run your diagram using the virtual env it manages by calling poetry run python diagram.py.

Additionally, any command line arguments you want to pass would just go through like poetry run python diagram.py --outdirectory foobar

Diagrams

The documentation is pretty thorough, but detailed examples and shortcuts are very hard to find. You'll have to dig through the repo issues on occasion if you find yourself wanting to do something that isn't obvious. This project seems to be a wrapper around graphviz, so a lot of the documentation for parameters and customizations will be in it's documentation, not in this project.

To find available nodes and shapes, you'll need to look at the diagram docs5

Simple Example

Using defaults you can create a simple diagram such as this:

vpc-diagram-simple

{{< gist sheldonhull "cc8abcb86c9463b0c74bb9e4d82ffac9" "01-diagram-vpc-example.py">}}

Add Some Helpers

From the github issues and my own customizations, I added a few additions to make the edge (ie, lines) flow easier to work with.

vpc-diagram-simple-with-helpers

{{< gist sheldonhull "cc8abcb86c9463b0c74bb9e4d82ffac9" "02.helpers.py">}}

A More Complex Example

I went through the AWS Reference Architecture Diagrams 3 and used this to provide a more complex example.

Take a look at the AWS PDF4 and compare.

complex-example

{{< gist sheldonhull "cc8abcb86c9463b0c74bb9e4d82ffac9" "03-diagram-complex.py">}}

Reference

Graphviz Reference
Colors
Available Nodes
Individual Node Edits
Reference for Graph Attributes

Go R1 Day 37

progress

  • initialized new start of cli tool to try to parse markdown content using Goldmark1 and then convert markdown links into reference style links
  • Improved default template for starting new basic cli tools with Go to include zerolog and run based design instead of the majority of logic being in main.