## Posts

Showing posts from May, 2015

### Tetris Written in Go

I implemented a console-based version of Tetris in Go . In general, it was a pleasant experience. I made use of the termbox-go library for console graphics, and it was enjoyable as well. I've been reading a lot of blog posts recently about Go, and I think this blog post is the one that captures my opinions best. It's also a treasure trove of useful links to various other blog posts and tidbits. Anyway, as I said, it was a fun experience :)

### Go: A Surprising Edge Case Concerning append and Slice Aliasing

In Go, the append function reallocates the underlying array if there's no more room. Hence, if you have two slices that point to the same array, after you append to one of the slices, the other slice may or may not point to the same array. This can lead to some unexpected behavior: package main import "fmt" func main() { // Create a slice of length 1 and capacity 2. a := make([]int, 1, 2) // b "aliases" a b := a // If I set something in a, you see it in b. a[0] = 1 fmt.Println(a[0], b[0]) // Prints 1 1; they're equal. // append returns a new slice, but with the same array. // Hence, if I set something in a, you still see it in b. a = append(a, 2) a[0] = 2 fmt.Println(a[0], b[0]) // Prints 2 2; they're equal. // I'm doing the same thing as last time. However, this time, // append has to allocate a new array because there's not enough // space. Hence, if I set something in a, you don't see it in b. a = append(a, 3) a

### Books: Getting More: How You Can Negotiate to Succeed in Work and Life

I finally finished Getting More: How to Negotiate to Achieve Your Goals in the Real World . It was one of the most influential books I've ever read. It has impacted every area of my life!