Track Your Achievements

An accomplishment journal, win diary or whatever title you want to put on it all means the same thing - somewhere you write down all your accomplishments through your career. It’s one of those high leverage things which is low effort but provides high reward once you stick at it. Tracking achievements is useful early in your career too as you move up from the entry level position.

There’s a bunch of places where having a quick and easy list of your achievements can come in handy. For example when you’re brushing up your resume while looking for a new job or an internal promotion, you want to be able to focus on telling the story rather than trying to remember what you did a few months ago. It’s even just useful to glance over while preparing for a job interview to remind you of some little details and keep you focused on what you’ve done. It can also come in handy when you’re in a rough point feeling like you’re making little or no progress in your day to day - being able to look back and see all the things you’ve accomplished can be a powerful motivational factor.

There’s not really any requirements to keeping record but keep it simple. There’s two pieces of advice I would recommend following. First, it has to be somewhere that you take with as you move across jobs or devices. You don’t want to have to start fresh if something happens your computer. Second, it has to be something easy

Read Full Post...
October 10, 2022 · 3 min

How to write better for software engineers.

How to write better for software engineers.

https://eugeneyan.com/writing/writing-docs-why-what-how/ There’s three questions any document you’re writing should answer - why it is important; what a good outcome is and how to measure it; and how to achieve the why and what. There’s examples of the three types of documents the author wrote while working at Amazon - one pagers; design docs; after action reviews.

June 13, 2022 · 1 min

Weekly Summary 2021-10-30

2021-10-30 Weekly Summary

This week I finally started this blog and posted a few things. For now it is a collection of random posts that are not very good quality but everyone has got to start somewhere so I may as well try start here. Below are a bunch of links I came across the last week or so I thought were interesting or notable.

financial innovation is actually happening

An argument that financial innovation is happening right now, contrary to many who look at the financial infrastructure and see an archaic backwards system creaking along. It makes the case that things are becoming faster and cheaper, with examples of faster cheaper transfers and remittances. (link)

Thoughts: Fintech is huge and an immensely complicated arena. There’s things in this post I don’t fully grasp.

October 30, 2021 · 1 min

Kubernetes Services

Kubernetes pods are ephemeral, meaning they can be destroyed at any time or moved to another location in the cluster. This means the IP of the pod changes without notice creating problems on how other applications and external traffic can reach the pod.

This is where services come into the picture. A service has a stable IP that clients can reliably use to contact a set of pods. There may be one or more pods in the set and the service provides load balancing over this set, taking care of which replica pod gets a particular request.

How Services Work

Services use labels to target pods. Each pod you want to target with the service should have a label on it. There is a corresponding label on the Service. In the example below the label on the service is app: blog which is also on the pod.

Discovering services can be done through environment variables or through DNS. DNS is the recommended method where a DNS server is added to the cluster and all pods should be able to resolve services through their DNS name.

Types of Services

There are three main types of services we can use.

Cluster IP: this is used to expose services within the cluster

Node Port: this allows services to be exposed externally to the cluster

Load Balancer: this is used when an external load balancer should be used, for example in GKE in the cloud

Example Service

Below is a sample yaml file for the config of a service of the default Cluster IP type:

apiVersion: v1
kind: Service
metadata:
 
Read Full Post...
October 27, 2021 · 2 min

Reading List for Software Engineers

As a sofware engineer, no matter how experienced, there’s always things we can learn from others. Some have more expertise in specific technologies, others have more experience in the “soft skills”. I’d like to think we can learn from the more experienced among us by learning what worked from them and adapting it for our own careers.

On that thought I’ve put together an incomplete list of blog posts that I’ve come across that may be useful. I hope to keep this updated with more as I go along

Software Engineering

Being Glue

https://noidea.dog/glue

How to be a Tech Influencer

https://lethain.com/tech-influencer/

How to ask Good Questions

https://jvns.ca/blog/good-questions/

Salary Negotiation

https://www.kalzumeus.com/2012/01/23/salary-negotiation/

You are not Google

https://blog.bradfieldcs.com/you-are-not-google-84912cf44afb

Code Review Pyramid

https://www.morling.dev/blog/the-code-review-pyramid/?utm_source=programmingdigest&utm_medium=email&utm_campaign=471

Refactoring

https://refactoring.guru/design-patterns

Don’t Call Yourself a Programmer

https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/

Developers mentoring other developers

https://blog.pragmaticengineer.com/developers-mentoring-other-developers/

Equity 101 for Software Engineers at Big Tech and Startups

https://blog.pragmaticengineer.com/equity-for-software-engineers/

Technical

Indexes in PostgreSQl

https://blog.mastermind.dev/indexes-in-postgresql

How to find more (Blog List)

Here’s a bunch of blogs that are worth reading

https://jvns.ca/blog/

https://www.kalzumeus.com/

https://www.joelonsoftware.com/

Bonus: Blog Search Engine

If you know what topic you’re after or you want to just browse a long list of blogs then this site is really helpful

https://blogsurf.io/

October 27, 2021 · 1 min

Hello World

I’ve started this short blog after trying and failing to start a writing “habit” many times before. The reason I want to write at all in the first place is to actually learn about anything you need to put your knowledge into good use. Its all well and good reading countless books and articles but you really need to write to take anything away from those. Writing also improves how you communicate, an invaluable skill in our remote asynchronous world.

My goal is to learn and explore a wide range of topics. I, like many people, have no real idea what my true interests or passions are. Fair enough I kind of am interested in a few things like finance, sports and business on top of my day job as a software engineer. However none of these things I can truly point to and say that is the thing I love learning about. This blog will be an exploration of all of those things plus more, going wherever my interests take me week to week.

There won’t be any formal process to selecting what I should research each week, rather it will be whatever I have learned or come across recently that I think I can write something about.

I hope as the weeks go on my writing will improve and I learn a great deal about the topics I research.

September 26, 2021 · 2 min

Backing up and restoring etcd

So here I’m going to go through backing up etcd on a kubernetes cluster.

The reason I’ve done this before is for the Kubernetes Certified Administrator (CKA) exam where you would need to know how to do this. In managed clusters like GKE then you probably will never need to interact with etcd.

There’s a few steps involved in Backup:

  1. save the snapshot Restore:
  2. stop all cluster components
  3. restore the snapshot
  4. restart all cluster components

Setup

The first thing you’ll want to do before all this is ssh onto the master node of the cluster. The master node is where things like etcd are configured.

We’re going to be using etcdctl to back up etcd in this tutorial. You can make sure it’s installed by running etcdctl version. This will return the etcdctl version and the API version which should be the same. If this command does not work then you can either install etcdctl or even see if etcd is even running on the cluster by seeing if there’s any etcd pods running

Authentication

Another thing you may need to do before continuing on is you may need to authenticate with the cluster. If you find the etcdctl commands hanging or not completing then this is probably the reason. One way of authenticating is by passing in the certs used for etcd. These are usually stored on the master node and you can find the location by looking at the etcd.yaml file. So for example

> cat /etc/kubernetes/manifests/etcd.yaml

...
spec:
  containers:
  - command:
    - etcd
  
Read Full Post...
April 3, 2021 · 3 min

Manually loading an Apparmor profile to Kubernetes

The aim of this doc is, as the title suggests, to load an apparmor profile to a Kubernetes node and see that it is loaded. What it is not is an explainer of AppArmor or how to create profiles. For that there are a few resources at the bottom which will be more useful.

Install the tools

I’m using the AppArmor utils to manipulate AppArmor here. First thing you will want to do is open a shell on the kubernetes node. An important thing to note here is if there are multiple nodes on your cluster then you will have to do this individually for each node so it is easiest to scale your cluster down to a single node if possible. Opening the shell is different depending on where you cluster is, I’m using GKE on Google’s cloud so I use this command to connect.

gcloud beta compute ssh --zone "<zone>" "<node_name>" --project "<project_name>"

The tools themselves are installed using the following command.

apt-get update && apt-get install -y apparmor apparmor-utils

Note: An important thing to note is this node is running ubuntu. You can use the toolbox command if it is available to use apt-get below.

Check it is working using the following which will list the profiles that already exist on the node. You may need root access using sudo su

aa-status

Setting up the Profile

AppArmor profiles are stored in the /etc/apparmor.d directory so cd into that folder and create a new file. I am using the name k8s-apparmor-deny-write. As the name suggests the profile will block all writes to

Read Full Post...
December 7, 2020 · 3 min