Bryan Klimt
8 Rejected Baby Names

There’s nothing more satisfying than judging others for what they name their kids. But naming a baby is hard. Just so that you don’t think we chose our baby’s name out of laziness, let me go through some of the runner ups, and tell you about some of the other cromulent options that we didn’t choose. If you yourself are expecting, feel free to use these names for your own children.

Zardoz - First impressions matter. And what makes a better first impression than 1970s era Sean Connery in a Speedo? And Zardoz isn’t a mouthful like Juan Sánchez Villa-Lobos Ramírez.

Quesarito - If you want your child to grow up to be a billionaire entrepreneur, why not name them after the pinnacle of 21st century innovation, Taco Bell’s new burrito wrapped in a quesadilla. And it isn’t a mouthful like Doritos Locos Taco, Regular, Nacho.

IG-88 - Sure, it’s trendy to name kids after your favorite Star Wars character, especially obscure bounty hunters. IG-88 is a great role model: tall, dark, and quiet. IG-88 was in the top running until his controversial tweets about #thinspo.

Bacon - The philosopher Francis Bacon is credited with inventing empiricism. In fact, the scientific method is also known as “the Baconian Method”. This would be a perfect name if hipsters hadn’t turned their lust for a particularly tasty meat into a trendy fad.


He also had impeccable taste in hats.

 

Zener Diode - According to Wikipedia, “A Zener diode is a diode which allows current to flow in the forward direction in the same manner as an ideal diode, but also permits it to flow in the reverse direction when the voltage is above a certain value known as the breakdown voltage, “Zener knee voltage”, “Zener voltage”, “avalanche point”, or “peak inverse voltage”.” Just the qualities you want to instill in your child as they grow up. But since our kid is at high risk for becoming an engineer, this would have been too confusing in the lab at work.

e9ab2823-cd25-4a41-b338-b480810061b1 - A unique name for your precious snowflake. You know there isn’t going to be another e9ab2823-cd25-4a41-b338-b480810061b1 in little e9ab2823-cd25-4a41-b338-b480810061b1’s kindergarten class. If that’s a little long, you can always call him e9ab2823-cd25-4a41-b338 for short.

Princess Fluffypetal - I know, it’s a stereotypical masculine name. But Princess Fluffypetal isn’t just a boy’s name. Just because you name your daughter this doesn’t mean she’s going to end up as a butch football player.

Rover - Let everyone know what a team player your kid is by naming them after man’s best friend. Don’t worry, no one will think your kid is a dog when they hear you yelling at them to sit over and over.

The Inside Scoop on Google+

Business Insider recently posted an entire article on the thoughts of a former Google+ engineer, where he quoted insiders with such insightful comments as “f*** off”. When I read it, I thought “Hey, I can do that.” So I got in contact with one of my old coworkers on Google+ to get the inside scoop on how things are going. The unedited transcript is below. I’m using a pseudonym to protect her identity. (If you are a current Google+ engineer, please contact me privately and I’ll explain to you what a “pseudonym” is and why they might be used.)

Bryan K: Hey, so how’s life as a Googler these days?

Anna Anon: It’s terrible. If I don’t stay at work late enough, they yell at me and call me names. Sometimes if I go home before 7, they hit me or throw things.

BK: Really? How late do your managers expect you to stay?

AA: Managers? What? No. I’m talking about my neighbors. I live in the Mission.

BK: But how are your working conditions?

AA: That’s even worse. It’s like Stalinist Russia here now. I just sat at my desklet and sobbed for three hours today.

BK: Oh no! What happened?

AA: The microkitchen nearest me runs out of Diet Dr Pepper by like 11am every day. It’s the literal worst.

BK: Wait a minute. What’s a desklet?

AA: It’s half a desk. They make us share desks now so we can learn to be more “social”.

BK: That sounds uncomfortable.

AA: Yeah, especially since I got the bottom half.

BK: I’ll cut to the chase. Are they getting rid of Google+?

AA: I want your Readers to Knol, despite all this media Buzz, Google isn’t just going to Wave goodbye to Google+. The team is still very Lively, and they have a lot of Latitude to grow the product into new areas.

BK: So you’re going to maintain it for a while?

AA: Maintain it? This is Google. [VP of Engineering] David [Besbris] is going to have to rewrite it from scratch if he wants to get promoted. The new version should be ready about six months from now.

BK: And when will the old version be deprecated?

AA: About three months from now.

BK: Ouch. So was [Former Google+ head] Vic [Gundotra]’s departure amicable?

AA: Oh yeah, everyone loves Vic. And we’re not just saying that because of how often he posts about how much he loves guns.

BK: Anything else you think folks outside Google should know?

AA: There’s an outside Google?

pacegallery:

Pop-up gallery: Pace Gallery is proud to announce the opening of a temporary exhibition space in Menlo Park, California from April 16 through June 30, 2014. 
Located in the former Tesla headquarters at 300 El Camino Real in the heart of Silicon Valley, Pace Menlo Park will present two exhibitions: Alexander Calder: The Art of Invention, from April 16 through May 13; and Tara Donovan: Untitled, from May 22 through June 30.

How appropriate for Silicon Valley.

pacegallery:

Pop-up gallery: Pace Gallery is proud to announce the opening of a temporary exhibition space in Menlo Park, California from April 16 through June 30, 2014.

Located in the former Tesla headquarters at 300 El Camino Real in the heart of Silicon Valley, Pace Menlo Park will present two exhibitions: Alexander Calder: The Art of Invention, from April 16 through May 13; and Tara Donovan: Untitled, from May 22 through June 30.

How appropriate for Silicon Valley.

Phenomenauts Sprites

imageimageimageimage

Some animated sprites I made. The first three are Professor Greg Arius of the Phenomenauts, with his Streamerator. The fourth one is some kind of alien Elvis impersonator or something.

Quiz Time!

Objective-C Blocks Quiz

Do you really know how blocks work in Objective-C? Take this quiz to find out.

All of these examples have been verified with this version of LLVM:

Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.4.2
Thread model: posix

Example A

This example

Example B

This example

Example C

This example

Example D

This example

Example E

This example

Conclusions

So, what’s the point of all this? The point is always use ARC. With ARC, blocks pretty much always work correctly. If you’re not using ARC, you better defensively block = [[block copy] autorelease] any time a block outlives the stack frame where it is declared. That will force it to be copied to the heap as an NSMallocBlock.

Haha! No, of course it’s not that simple. According to Apple:

Blocks “just work” when you pass blocks up the stack in ARC mode, such as in a return. You don’t have to call Block Copy any more. You still need to use [^{} copy] when passing “down” the stack into arrayWithObjects: and other methods that do a retain.

But one of the LLVM maintainers later said:

We consider this to be a compiler bug, and it has been fixed for months in the open-source clang repository. What that means for any hypothetical future Xcode release, I cannot say. :)

So, hopefully Apple was describing a workaround for bugs that existed at the time their guide was written, and everything should work smoothly with ARC and LLVM in the future. But watch out. ;)

My progress so far.

My progress so far.

Go

I’ve been learning Go the last few days. I’ve been trying to learn the rules of the language, so that when I encounter new code, I can apply those principles and understand it quickly and thoroughly. But I’ve been having a really hard time. I get the feeling that Go was designed by System Engineers, who focus on implementation. The API Designer in me is getting frustrated with the lack of consistency in the language. There are more exceptions than rules. Here are some of the things I find the most confusing.

Instantiation

Let’s say you want to create a new instance of Foo. How do you do it? Well, first, you’ve got to know what primitive type Foo is descended from. If it happens to be an int or bool or something like that, you can do either of these:

var x Foo
y := 3

If Foo is derived from map, slice, or chan, then you use this special function called make:

hash := make(map[string]int)
slice := make([]int 100)
c := make(chan int)

Why is there this special function that construct these three random types? I don’t know.

If Foo is derived from struct, then you have to know whether the struct is usable when it’s zero-valued. I think most of them are. But watch out, because there’s nothing to stop you from making one that’s zero-valued when it’s not valid.

There’s a function called new that can create a zero-valued struct, but as far I can tell, you’re never supposed to use it, because you can use the literal syntax instead:

// Foo is valid when zero-valued. These two declarations are equivalent.
fooPtr := &Foo{}
fooPtr := new(Foo)

Why does new exist?

If Foo is derived from a struct, and it doesn’t work when zero-valued, then there should be a function somewhere called something like NewFoo. Good luck finding the right one.

foo := foopkg.NewFoo(arg1, arg2)

Value Semantics

Every type in Go uses value semantics, meaning passing it to a function will be a pass-by-value. Except maps and slices. They are passed by reference. I think it’s only those two. Despite the similarity between arrays and slices, the former is a value type, while the latter is a reference type. I think channels are value types, which is strange since it’s the only other type created with make. (Correction: Channels are reference types, so maybe that explains make; it generates the three reference types.)

Partial methods

You can add methods to types outside of the file where the type was defined. This should be incredibly powerful:

type Foo struct {
  bar string
}

// A method on Foo.
func (foo *Foo) setBar(aString string) {
  foo.bar = aString
}

Unfortunately, this feature has been neutered by only being able to extend types in your own package. You can’t add methods to built-in types like string or int. This means those types can never fulfill any new interfaces you add. You can derive a new type from those types, and extend that, but then you have to explicitly cast wherever you use it.

type ExtensibleInt int

func (x ExtensibleInt) timesTwo() int {
  return x * 2
}

var myInt extensibleInt = 3

// You have to explicitly cast it back to int.
fmt.Printf("%d", int(myInt));

Non-standard library

Unfortunately, not being able to add methods to string makes the standard library a bit wonky. For example, you have to write strings.HasPrefix(str, pre) instead of the more obvious str.HasPrefix(pre).

The standard library also seems to be missing a lot of the most common data types. As far as I can tell, there are no standard stack or queue types. But there is heap. How can a language provide an http server, but no stack type?

In-band signaling

Go has a wonderful feature that a method can return multiple values.

// ok is true iff the key is in the map.
value, ok := someMap[key]

As the designers of Go point out, this helps you avoid in-band signaling. By not conflating a special value (such as nil) with the lack of presence, you are free to have nil be a legitimately returned value.

Unfortunately, I don’t think they’ve really internalized this concept. Strings can’t nil, which is fine on its own, But lots of folks on the internet have been asking for a nullable string type, such as how nullable types work in C#, or how String works in Java. That way, you can write functions where a string is optional, but the empty string is also a valid input.

So what’s the response from Go’s designers about the requests for nullable strings? To treat the empty string as a special value. Sometimes it’s like they haven’t even read their own design justifications.

Conclusions

This post has been about my problems with learning Go, but let me be clear that I don’t think Go is a terrible language. It has some really great features, such as multiple return values and the := operator. And the results seem to be very efficient binaries that build almost instantly. It may be an awesome language once you get to know it well.

But all the inconsistencies in the language design have made learning it feel like a chore.

Another set of texts from Paige’s friends.

Another set of texts from Paige’s friends.