Sign in

I’ve seen a lot of pretty bad resumes and it really isn’t too hard to create a decent looking one. In fact, good resumes are fairly simple in design. This is a quick guide to create one from scratch, I’ve experimented with templates and automatic resume generators, but they tend to add a bunch of unnecessary fluff. Everything here can be done on Google docs.

Let’s start with style. Don’t pick weird fonts. A simple serif font like Times New Roman is more than enough. A good litmus test for font is to check how far the font deviates from…

Vault is a is a secret store and I didn’t really understand it at first so here’s a quick article on why you might want to use something like Vault.

What is Vault

Vault is more or less a key value store specifically made for your secrets. It will encrypt the secrets that you store on disk and make sure that no one else can access the actual storage directly. It has an http api interface that requires you to supply a token in order to have permissions to access the secrets. I’ll talk more on how we are to distribute the tokens.

Key Rotation

For comprehensions are beautiful.

Basic syntax & rules:

  • backwards arrows call flatmap
  • equal sign is basic assignment(you do not use val or var because everything is a val inside a for comprehension)
  • you can filter using an if at the end of the line like python list comprehensions
  • the yield at the end calls map

Simple example, let’s say we get a epoch string and we want to turn it into a date.

val epoch = "123123123"
for {
epochInt <- Try(epoch.toInt)
time <- Try(Datetime.fromEpoch(epochInt))
} yield time
this is equivalent toTry(epoch).flatMap { epochInt =>
Try(Datetime.fromEpoch(epochInt)).map …

So one problem that I used to always run into is how to chain network calls with a return signatures that looks something like Future[Option[A]] or Future[Either[A, B]]. If you only have one network call like this you are totally in the clear. If you have two of these that you have to chain then you have to do some gross pattern matching that looks like such.

import cats.syntax._def networkCall1: Future[Either[Error, A]]
def networkCall2(a: A): Future[Either[Error, B]]
networkCall1.flatMap {
case Right(x) => networkCall2(x)
case Left(error) => Future.successful(error.asLeft)

And if you have three chained network calls then you might…

Alright, this is like the 100th explanation to monads, but the first 99 all preface by saying that it’s for programmers then pull out category theory with Haskell sooo, I’m going to try to explain how I figured out monads. Also I’m going to try to avoid type signatures because when I was learning Scala, those were confusing as hell and monads should be one of the first things you try to understand when learning Scala.

So if you ever read any Scala code, you might’ve come across the Try which is a monad and it pretty much solves the…


I’m green

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store