Co-operation and Competition

I came across an interesting term in a book I just read. The Origins of Virtue by Matt Ridley. In it he used the term “Co-operation and Competition” as a means to describe the “tug-of-war” within the various biological processes of the human body. The same applies to industry / society / economies too. A healthy combination of both is required to thrive. Co-operation on it’s own would devolve into something like Communism.

Go Docker Container

If anyone is looking for a ubuntu based container with golang 1.13, I just pushed one up to docker hub: docker pull jimmyislive/goubuntu And this container has vim ! (Not sure why many public containers don’t have any editor installed on them.) The Dockerfile used to build this container is available on Github

Text to Morse Code

Recently I learnt morse code. It was pretty easy to translate characters to dot/dashes (it took me under a day). I then wrote a Go program to translate text to morse code and back. If anyone wants to play with it, it is available at text2morse.jimmyislive.dev The site is hosted by Netlify and the backend is built using terraform, api-gateway and aws lambda. Enjoy !

Automated setup of a static site on S3 using Terraform

Many people, businesses don’t need a dynamic website. they just need a placeholder on the web that gives information to customers about their business, contact info, address etc. A static website is a pretty easy way to achieve this. AWS S3 allows you to host static content and serve it up as webpages. You can set it up manually by following instructions here. This post provides scripts for automating it via Terraform.

AWS Config

AWS Config is a service provided by AWS to keep track of configurations (and their possible drift) of all the resources you bring up in AWS. When your infrastructure setup is small, you probably don’t have to be worried about a configuration store for your resources. But as you grow, it would become increasingly difficult to manage and keep track of all the moving pieces, especially if you have a team of engineers continually deploying and changing things.

Free Scratch course for kids

A while back I created some scratch exercises for my kids. It is modeled as a series of exercises (with solutions) that you/your kids can try as you learn programming. Just put it in the form of a free course: Scratch for Beginners. Enjoy!

Testing with Go

An integral part of the development licefycle is writing tests. Write tests early, write tests often as they say. Go makes it very easy to write tests. The following post will go through the basics of testing with Go. Let’s say we have a program that counts the number of vowels, consonants, digits and everything else within an input string. It may look something like this: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 package main import ( "flag" "fmt" ) // CountChars counts the number of characters in a string func CountChars(str string) (int, int, int, int) { vcount := 0 ccount := 0 dcount := 0 ocount := 0 for i := 0; i < len(str); i++ { switch str[i] { case 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U': vcount++ case 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z', 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z': ccount++ case '1', '2', '3', '4', '5', '6', '7', '8', '9', '0': dcount++ default: ocount++ } } return vcount, ccount, dcount, ocount } func main() { inputStr := flag.

Introduction to Go Modules

Table of Contents Preface Why Go Modules Philosophy Example Preface All the content for this post was gathered by reading the 7 part blog series by Russ Cox and other notes. There is also an introductory post on the Go blog. I would encourange you to read them as well. Why Go Modules Before jumping into the workings of Go modules, we should first understand why we need it in the first place.

Life...

Defer on exit

Working with go, sometimes you may want to run a deferred action on Exit. Something like: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main import ( "fmt" "os" ) func main() { // THIS WILL NOT WORK defer fmt.Println("World") fmt.Println("Hello") // some code here... os.Exit(0) } In the above code, World will never get printed. This is because defer is not run on os.