Lee Abner's Blog A journey of growth and learning in the techology field, with an emphasis on virtualization, cloud, and security

Uses This

I wanted to do a post similar to what they do over at Uses This and give you an idea of the tools of the trade, at least as far as what I personally use. This is an area of great personal preference, so my tools are just what I am using to get the job done at this time. My tools change over time, so maybe I will make this a reoccurring post every other year or so.

Hardware

My main computer is a 16” M3 MacBook Pro . The MacBook has 36GB of RAM and a 1TB SSD drive. To be honest the computer is probably overkill for me at this time, but when I bought it I was doing a lot of things with virtual machines locally on the computer. Now I do more work with virtual machines in the cloud. IN my home office my MacBook Pro is connected to a 43” Dell Monitor via USB-C. I am not a hug fan of dual monitors, so having the screen real estate that this monitor provides me with is great. Plus, during downtime, it is a good monitor for watching content online. I use a wireless apple keyboard 10 key with touch ID and a Magic Trackpad. I also have a Anker webcam for video conferencing. I also use a 13" M4 Macbook Air when I am traveling. The computer has 16GB of RAM and a 256GB SSD drive. It is fine when I just need a browser, email, and maybe some light text editing. I have found that this computer can handle most of my everyday tasks.

I have a 256GB iPhone 16 Pro Max that I carry with me everywhere and a 11” iPad pro that I utilize for anything from reading, to games, to actually doing some work. I bought the Keyboard for my 11 inch iPad Pro and I really enjoy taking notes in meetings and conferences that way.

Software

These days most of my work is done in Visual Studio Code , a browser, and the terminal. For my browser, I use the built in Safari browser mostly and for the things that dont work well in that, I use Firefox. As I mentioned in other posts, I install most of my software via Homebrew, I find that it is the best way to get it installed on a Mac and an easy way to keep everything up to date. For my terminal, I prefer iTerm2 to the built in terminal. I have also done some customization to the prompt that allows me to see where I am at and what git branch I am on, maybe I will do a post on my customization.

Of course, as part of an organization, I run the Microsoft Office products for email and spreadsheets. I prefer to do my documentation in Markdown, so I use Visual Studio Code for that, or if it’s just something I want to remember for my self, I use an app called Bear that syncs across all my apple products.

Analog

While I am tech person and do enjoy my tech tools, I also enjoy some analog tools that I think help me work better. I like to carry around a Field Notes notebook to make lists, do some calculations or to jot down ideas that come to me. I also use them for various purposes throughout my house and car to track things like my reading and when I fill my car up with gas. In conjunction with my Field Notes, I like to use Blackwing Pencils. I know they are just pencils, but they are the best pencils I have ever used, come at me.

Carry

I carry everything I need to go with me in an older Timbuk2 Command messenger bag that I bought off of Amazon for cheap. The bag is still in pretty good shape, but I will be sad when it wears out because they don’t make them like that anymore, both in style and structure. I carry various cables around to make sure that I can charge things if I need to. I used to carry a powerbank with me, but I found out I never used it, only other people around me used it, so let them start carrying their own. I have tried to make my carry as light as possible and only include what I need versus trying to plan for all eventualities.

What is my dream setup

I think I am pretty close to my dream setup now, if anything I would probably want to narrow it down to just one computer that I could easily carry around, so maybe a 15” Macbook Air with 32GB of Ram and a 1TB SSD drive. That would give me all the power I could want, as well as being highly portable.

Blog Automation

While it was fairly easy to manually copy the files for the blog up to my S3 bucket and then create an invalidation in Cloudfront, I decided that I wanted to streamline that process and see if I could make it even easier. I want to automate it all using the AWS cli and write a BASH script that will do the deploy. In the future I might move towards Github actions when I push an update to Github it will do the update, but baby steps.

Install AWS cli

To automate the AWS things, I needed the AWS cli tools installed on my computer. That is easy enough using Homebrew, which I highly recommend if using a Mac.

brew install awscli

User Setup

For my personal AWS account, I have always loged in as the root user. I know it is not best practice, but since I am the only one doing anything in the account, I figured it was ok. I decided that since I need programatical access to AWS that it was time I setup some real IAM credentials. I wanted to make sure I did this with the concept of least priveldges in mind, so for the account, I simply created an account with console access and then setup MFA on that account. AWS IAM permissions are out of scope for this post, but to allow the user to assign MFA to their account they need the permission IAMReadOnlyAccess added.

I needed to grant the user rights to be able to delete files from my S3 bucket, copy files to the S3 bucket, and to create an invalidation on my CloudFront distribution as well as sign into the cli tools. To grant access from the cli tool I created a group and assigned the AWS Permission SignInLocalDevelopmentAccess to the group. To grant the other permissions, I created an inline policy to the group and added the following policy.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListBlogBucket",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Resource": "arn:aws:s3:::BUCKET_NAME"
    },
    {
      "Sid": "WriteAndDeleteBlogObjects",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::BUCKET_NAME/*"
    },
    {
      "Sid": "InvalidateCloudFront",
      "Effect": "Allow",
      "Action": "cloudfront:CreateInvalidation",
      "Resource": "arn:aws:cloudfront::AWS_ACCOUNT_ID:distribution/CLOUDFRONT_DISTRIBUTION_ID"
    }
  ]
}

Now to be able to use the AWS cli commands and run the script, we need to be logged into AWS to perform those actions. This can be achieved by setting up an AWS Key ID and secret key that we can use. But there is a simpler way, the AWS cli tools allow you to log in via the command line, by simply running the command.
aws login
This will use the web browser to sign you in and will be active for 24 hours.

Deploy Script

To actually deploy the script I wrote a simple BASH script that will build the Hugo files into the public folder, sync the files into the S3 bucket and create the CloudFront invalidation.The invalidation essentially tells CloudFront to get rid of cached files and look again at the S3 bucket.

Run touch to create file.
touch deploy.sh

The script looks like this.

#!/bin/bash
set -e

BUCKET="BUCKET_NAME"
DISTRIBUTION_ID="CLOUDFRONT_DISTRIBUTION_ID"

echo "Building Hugo site..."
hugo --gc --minify

echo "Syncing to S3..."
aws s3 sync public/ s3://$BUCKET --delete

echo "Invalidating CloudFront..."
aws cloudfront create-invalidation \
  --distribution-id $DISTRIBUTION_ID \
  --paths "/*"

echo "Deploy complete."

Need to make the script executable by running the chmod command.
chmod +x deploy.sh

Running the script

To reun the script and deply the site you simply run the command.
./deploy.sh

That’s it and now the deploy only takes a couple of seconds to run and reduces any chances of me manually screwing something up.

Schedule a Web Edit

One of the tasks I perform at work is updating the website. Sometimes the updates are time sensitive and need to go live at a particular time to coincide with other activities. It always seems like those times end up being in the middle of the night or early in the morning. Since I am not a big fan of waking up to just update the website I was looking for a way to schedule it. Cron is better used for tasks that repeat, kind of like a Windows Scheduled Tasks and not intended for things that only happen once. I was very happy when I came accross the at command. Using the at command, you can schedule a single run command to be run.

Documentation can be found here Using at for single-use cron jobs in Linux

Format is the command at followed by -t for Time followed by -f for the file you want to run.

YYYY - Year MM - Month
DD - Day of the Month
TTTT - time in 24hr format

at -t YYYYMMDDTTTT -f filename
at -t 202605010445 -f gitpullcibmarine.sh

Will run the command gitpullcibmarine.sh at 4:45am on 5/01/2026

at -t 202604301100 -f gitpullcibmbank.sh

A 2026 Update

It has been a long time since I have posted on this blog. I never did get into the swing of posting when I learned something new or had an idea. The concept of sharing this information does not come naturally to me. I need to get out of my head that I am posting for someone else to read and use it as almost a way to document my learning. I am a big believer in being a life long learner and even though I have not posted about it, I do continue to learn. They say you learn best by teaching others, so I am going to use this blog as a means to do that, even if no one ever really reads it or learns anything from it.

All of our jobs have changed since 2018 as technology has evolved and I am no different. I am not nearly as focused on virtualization as I was, but do spend more time on security than I ever have. I have also been looking into ways to automate things and Infrastructe as Code has really piqued my interest, so I am sure there will be some posts about that in the future.

Topics I am hoping to post about include Infrastructure as Code, including Ansible, and Terraform. Amazon AWS general information as I am no expert, at this time anyway, but I do all my personal work in AWS. Some Azure information as we use Azure for some small things at work, and I might be able to extrapolate my learning to those as well. I might post some musings on security topics as I see things or if there is anything technical that I do, I might try and replay that as well. In general, anytime I try something new, I want to document it.

Another benefit of this blog is that I have become obsessed with writing in Markdown. It seems like such an easy way to write documentation that can be presented in a easy to read format. Since the blog still uses Hugo it will be a good way for me to practice more in writing Markdown.

Well let’s hope it doesn’t take eight years until my next post.

Why Start a blog?

I will admit, that I have always had the imposter syndrome. I knew how to do stuff in my small little world, but in the grand scheme of things I didn’t know very much at all. Certainly not as much as people that I looked up to like Scott Lowe, Chris Wahl, Duncan Epping, Eric Shanks and many more. I always felt like what would I have to offer.

The first realization that I might know something was years ago, when I interviewed with a large insurance company, and after I got the job, they were just casually talking about the other candidates, and from my perspective, much more qualified, including a candidate that had a Ph. D. I asked why they hired me, and the response, was “every technology that we use you have experience with, it’s just a matter of scale after that.”

I knew after that, I at least had some marketable skills, and sometimes thought about starting a blog, but I always justified that no one would want to read what I have to say, so why bother. I don’t do anything grand or very technical that would lend anyone a hand. Every year, when I was thinking about what I wanted to accomplish for the year, the thought of starting a blog would be there, and I would think this is the year, but would always fall back to being an imposter.

So why start now?

I guess as I have gotten older, I have stopped caring so much what other people think, certainly people that I have never met. I don’t have to compare myself to the big hitters out there, I only have to compare myself to how good I can be. Maybe nothing I write will help a ton of people, heck it might not help anyone at all. There are people out there just starting out in IT and maybe something that we think is so simple, might be useful to them. I have been around the industry for quite some time, maybe that experience will be useful to someone.

Bottom line, it doesn’t really matter. I have decided I am doing this to collect my thoughts and get them down, as kind of a record of what I learned. If no one ever even looks at this site, I am fine with that. This is for me.

I will see where this journey takes me and if by some small chance, my blog helps someone, well then that will be icing on the cake.

Credits

I would like to give some credit to Scott Lowe for the technical knowledge on a good way to build and host my site. Specifically this article on using Hugo to build the site was valuable. I know Scott will probably never see this, but thank you. If imitation is the great form of flattery, then Scott should be flattered, I stole his look and feel as well. I just liked the simple clean look to it, I didn’t want it to be too cluttered.

Goals for 2018

I thought it might be good idea to put my goals for the year out there to see if making them public would help make me be more accountable about achieving them. I generally set some pretty aggressive goals for each year and don’t end up making most of them, so we will see how this goes.

  1. Start a Blog - I guess I am well on my way to achieving this, I guess if I ever do more than just write this and actually get it posted somewhere. I will probably do a whole post on why I want to do a blog separately.
  2. Acheive a certification. - There are not certifications that I have to have to do my job, but a lot of things I am interested in. The top candidates for certifications this year would be the AWS Solutions Architect Associates certification, the Certified Ethical Hacker (CEH) and the Offensive Security Certified Professional (OSCP). I fear the OSCP exam, so that one might be my stretch goal.
  3. Read 25 books in the year. - This isn’t just a goal of reading 25 technical books, I am not sure how many technical books I have ever read cover to cover, but rather this is about reading in general. This will probably end up being mostly novels that I read, but hopefully there will be a couple of biographies and non-fiction books in there as well.
  4. Improve my Web Development Skills. - I know that for work, I am being asked to consolidate and update the website, and I knew just enough the last time to get something out there, but to move it to the next level, I am going to have to improve my skills in this area. The things I need to improve on are updating my Bootstrap knowledge to include the new version. Since Bootstrap has gone to SASS over LESS, I will need to update that skill as well. I would also like to become more proficient in javascript.
  5. Lose 50 pounds - I realize this blog is more geared toward what I do technically, at least that is my intention, but I wanted to get this out there, because if I need accountability for anything it is my weight loss.