Meaningful Relationships and the Art of Networking

Family

My father and I have had arguments about family for most of my life. My father keeps insisting that now that I am an adult I should make a pilgrimage twice a year to go to his family reunions. I don’t see the point in going to these because I had many of these events from my childhood where I felt kind of like we were the Anne of Cleeves juice glass in the collection of wives of Henry VIII. We needed to be there so that there would be a complete set of my father’s siblings and family, but once we were accounted for we were kind of ignored and forgotten.

I came to terms with this at some point in my early adulthood because, honestly, what do you say to people you only see twice a year? Most of my relatives were much older than I was. My cousins were in college and getting married when I was in Jr. High. We were at different points in our lives.

The advent of Facebook and the Internet has made it much easier to connect with my relatives and keep up with what they are doing. We’re also now all adults and it’s a little easier to connect with people when you’re at the same point in your life.

Yet still I fight with my father over the necessity to go there and see people in person. We would have incredibly heated arguments over this and I could never articulate why this bothered me so much until recently, and yes, it does has something to do with networking.

Meaningful Relationships

I guess the things that bothers me about going to various family reunions is that they are perfunctory and superficial. You go, you say hi to the host, you eat your sandwich, you go home.

I observed over many years that most people’s relationships with their families were much different than my own.

I grew up in a very small town where most people had a huge network of cousins and other relatives who were all around the same age. They were thick as thieves in school and continue to voluntarily spend time together as adults. People weren’t just cousins, they were friends as well.

My cousins were not my friends. I really think that they could have been.

I remember as a kid being hauled to the family Christmas brunch where I would usually find a nice corner to sit in and read my Babysitter’s Club books while I waited for presents to be opened so that we could go back to the hotel and go swimming. One thing that happened every year was that my cousins would all go out to a movie and I was always invited to go. My dad would tell them no, I wasn’t allowed to go with them.

After a few years they stopped asking and whatever relationship I had with them withered until I became an adult and reconnected with them on social media.

My mother’s family was closer in both age and geographically and I barely saw them either. I will now go on Facebook and see every cousin of my mother’s, except her, go on a week-long camping trip and other various adventures that we are never included in because we’re not really a member of the family.

I keep fighting with my dad because I think we have different ideas of what “family” is.

My dad thinks that family is people you are related to by blood who are obligated to take you in if you are in trouble. He sees them like Social Security. You show up once a year to let them know you are alive so that if you are at a point where you might not be you can show up with your hand out and expect to be taken care of.

To me, what I observed, is that family are your social circle and your safety net. Family is people you want to spend time with and who you want to help if they’re in trouble. My dad has no interest in a meaningful relationship with any member of his or my mother’s extended family and he assumes that the blood tie is enough to fulfill this goal.

So What Does this Have to do with Networking?

I’ve noticed that some people are taking the wrong approach to networking.

Many people think that having several hundred LinkedIn connections is a network. It isn’t.

Jeremy Sherman was talking at the mini-360iDev in Greenville last year about how he networked with a journalist he hoped would feature him in a piece for his magazine. The only reason this tactic worked was because Jeremy actually made friends with this person. They liked one another and it was a real, meaningful relationship. He made it clear it wasn’t a mercenary tactic, he just really wanted to befriend the guy and that it worked out because he treated the journalist as a human being and not an opportunity.

All of the opportunities I have had have come from having meaningful relationships with people in this community.

It means a lot to me that the Kleins, the Remsiks, and the Wilkers have given me the opportunity to speak at their conferences. I like all of them as people very much. If I didn’t get to speak at 360iDev in two weeks (buy your tickets!), I would still like the Wilkers very much and would have found a way to go (but I am glad I didn’t have to).

I made friends with Chris Adamson because I liked the work that he did. We hung out at Anime Central the last two years because we were friends and we both had a mutual enjoyment of anime.

If I had gone into my friendship with him with the agenda that I was going to get something out of him, our friendship would never have materialized. People can sense users a mile away. Don’t be a user.

I am at a point right now where if I lost my job this afternoon, I have a large number of people I would go to for help, not just to find another job, but just because they’re friends who I think can give me advice and comfort about what to do. I have a lot of people in this community that I consider to be close friends and confidants and it makes my life and career richer for having a meaningful relationship with them.

Networking is about building meaningful relationships with people. It’s about seeing them as people and spending time with them even if it doesn’t immediately get you anything. It’s about finding people you genuinely like and who genuinely like you. If you go to one conference and meet someone once and never follow up with them, then I am sorry, they are not a connection in your network.

If you’re going to go to the expense and time of attending a conference, make the most of it. Meet as many people as you can. Find people who like the same things you do and keep in touch with them. You can’t pick your family, but you can pick the people you choose to be connected to.

Property Lists And User Defaults in Swift

I have written a bit about some of the work I am doing right now. Sadly, for most of this calendar year I have worked with Swift very little. I spent a lot of time working with some old open-source C libraries. Trying to yank my brain from the C precipice and trying to force it back into thinking in Swift.

My boss Brad Larson has been diving into the deep end of the Swift pool and bringing a bunch of treasures up from the bottom that I never would have considered. I am taking one of these treasures and examining how it works and what issues in our code it solves. I am hoping that by taking an elegant solution that many of us might not have thought of that we can all start thinking outside the OOP box.

The first part of this blog post is talking about some Cocoa concepts you probably are familiar with if you are not a new developer. Since I am a new developer, this stuff was new to me and interesting, so if you’ve been programming a while, you can probably skim this first section.

NSCoding, Property Lists, and Objective-C

The main piece of software we utilize at my company is SonoGuide. This is a piece of software that controls our robotics systems. Our systems print very minute amounts of liquid on a very small scale. Our positioner systems must be very precise. Our systems are rated to be accurate down to five microns. For those who haven’t worked with measurements for a while, that is 0.005 millimeters. You know, those super tiny increments on the ruler that are smaller than the tip of your pencil. So we are dealing with things that are incredibly small.

One of the pieces of functionality that we want our users to have is to be able to save coordinates. Since our systems are so precise and measure such small distances, it would be rather annoying for them to have to remember where their solution wells are in relation to the substrate they are printing on. We would like these positions to persist even if the user turns off the computer for the day and comes back next week.

It makes the most sense to keep these locations in the NSUserDefaults, which is a Property List. Property Lists, or plists, are NSDictionaries that contain different types of data. They can include arrays, strings, numbers, and even other NSDictionaries.

So we need an array of coordinate objects that we want to store in the NSUserDefaults that we are able to store and retrieve when necessary.

The way we, and everyone else, accomplished this back in the before time was as follows:

Serialization and NSCoder

While we’re still in the Way Back machine, do you remember that there was a period of time where if you looked at crash logs, you got weird hexadecimal values for where your app crashed rather than a nice, neat, human readable line of code?

The process of turning that value into a line of code is called “serialization.” The best mental explanation I have for serialization is the explanation that Mike Teevee uses to explain what television is in Willy Wonka and the Chocolate Factory:

You photograph something, and then the photograph is split up into millions of tiny pieces, and they go whizzing through the air down to your TV set where they’re all put together again in the right order.

Except instead of a photograph, you are using data and instead of it whizzing through the air, it’s whizzing through your hard drive in an area where it can be persisted and reproduced accurately.

We used the archiving functionality built into Cocoa to do our data serialization. Our persistence needs were not large enough to justify using Core Data and I think it’s possible that Core Data didn’t exist when the project was created. For a good background on choosing how to persist data, read Mattt Thompson’s post on the topic.

Archiving functionality has a few pieces. It has NSKeyedArchiver and NSKeyedUnarchiver for pushing and pulling the data. It also has NSCoder, which is where we, as the programmer, specify how to encode and decode our data.

NSCoding is a protocol that requires two methods to be written to conform to the protocol: encodeWithCoder and initWithCoder.

We implement the initialization protocol in our Coordinate class:

#pragma mark -
#pragma mark NSCoding protocol methods

- (void)encodeWithCoder:(NSCoder *)coder;
{
    if (name != nil) {
        [coder encodeObject:name forKey:@"name"];
        [coder encodeInteger:x forKey:@"x"];
        [coder encodeInteger:y forKey:@"y"];
        [coder encodeInteger:z forKey:@"z"];
    }
}

- (id)initWithCoder:(NSCoder *)coder;
{
    self = [self initWithX:[coder decodeIntForKey:@"x"] 
                      andY:[coder decodeIntForKey:@"y"] 
                      andZ:[coder decodeIntForKey:@"z"]];
    if (self != nil)
    {
        self.name = [coder decodeObjectForKey:@"name"];
    }

    return self;
}

With this code we are simply encoding the name of our coordinate object as a key and then adding the x, y, and z locations as values.

This takes care of our issues with serializing our coordinates. The coordinates are converted into NSData, making it nice and easy for us to move it from one place to another.

So cool, we have encoded our coordinate and we can extract it by decoding it. Huzzah.

So how do we decode our coordinate?

Our coordinate is stored as NSData. We have to reach out to our NSUserDefaults, look for anything encoded with the key “savedPositions”, decode it, and bring it back here.

NSData *dataRepresentingSavedPositions = [[NSUserDefaults standardUserDefaults]
                                           objectForKey:@"savedPositions"];
if (dataRepresentingSavedPositions != nil)
{
    NSArray *oldSavedPositions = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedPositions];
}

If you are interested in learning more about the NSCoding process, read this amazing blog post by Mike Ash.

Problems With This Approach

If you have learned anything about archiving data, this is the method you were probably taught. I did this myself while I was working through the Big Nerd Ranch guide to iOS programming. This is the standard. What is wrong with it.

Quite a bit, actually.

NSData isn’t inherently safe.

NSData is basically grey goo. It is a large clump of bits and bytes that have things fed into it and pulled out of it.

In our dataRepresentingSavedPositions we are simply pulling out any values associated with the key savedPositions. We are trusting that the data we are pulling is the kind that we want. It’s possible that our users have gone into the defaults property list and changed something. It’s possible that a hacker has gone and replaced one of our coordinates with a malicious executable file. We don’t know. There are no safety checks to ensure that none of these situations occur because when we serialized our data, we lost its type information. We’re living on a prayer here.

NSCoder can only be applied to an object inheriting from NSObject.

The way we structured our Swift code, we take advantage of the enhanced features of structs and enums. Our structs cannot comply to the NSCoder protocol because the only things that can are objects that inherit from NSObject.

In Mike’s article about implementing NSCoding, he mentions that if you want to encode a struct, you can’t encode it directly because it breaks. You need to break a struct down into its base components if you want to store and serialize them.

Since Apple has made it rather clear at this most recent WWDC that they would like us to start moving away from making everything an object, it doesn’t make a lot of sense for us to completely rewrite our code to start making our coordinates objects rather than structs.

Basically, NSCoder is build around the idea that you will only work with and encode objects, which is not how many of us program anymore.

A Swift Approach

Since we can’t really do our serialization and archiving the way we did them in the previous version of the code, how did we approach and solve this issue?

I will go over the various components of this code.

Structs

Right off the bat, we are creating our coordinate as a struct and not an object:

struct Coordinate {
    let x:Double
    let y:Double
    let z:Double

    init(_ x: Double, _ y: Double, _ z: Double) {
        self.x = x
        self.y = y
        self.z = z
    }
}

Since we know from earlier that we can’t associate NSCoder with our Coordinate struct, we need to figure out another way to deal with it. We used a protocol.

Protocols

protocol PropertyListReadable {
    func propertyListRepresentation() -> NSDictionary
    init?(propertyListRepresentation:NSDictionary?)
}

Since property lists are just NSDictionary objects, we need to make sure that anything that conforms to PropertyListReadable is able to create and take in NSDictionary objects.

Since we can now extend structs with protocols, we are able to take the PropertyListReadable protocol and extend the Coordinate struct:

extension Coordinate: PropertyListReadable {
    func propertyListRepresentation() -> NSDictionary {
        let representation:[String:AnyObject] = ["x":self.x, "y":self.y, "z":self.z]
        return representation
    }

    init?(propertyListRepresentation:NSDictionary?) {
        guard let values = propertyListRepresentation else {return nil}
        if let xCoordinate = values["x"] as? Double,
               yCoordinate = values["y"] as? Double,
               zCoordinate = values["z"] as? Double {
                   self.x = xCoordinate
                   self.y = yCoordinate
                   self.z = zCoordinate
        } else {
            return nil
        }
    }
}

The propertyListRepresentation function works under the assumption that a Coordinate instance was already able to be initialized with the correct number and types of parameters. This function goes through the Coordinate instance and sets key-value pairs for each of the axis and returns an NSDictionary. This function allows you to take any and all Coordinate instances and format them in such a way that they can be saved to the NSUserDefaults.

There are some situations where you want to go the other way. You have extracted an NSDictionary from the NSUserDefaults and you want to break it back down into a Coordinate instance. Since you can’t be certain that the data you are pulling from the defaults is in fact a completed coordinate, you need to use a failable initializer. You also need to make sure your return value is optional because if you were pulling data associated with a string you don’t want to crash your app by trying to process nonsense.

In our first line of code, we are implementing the shiny new guard statement. Since many of you may not have had time to dabble with guard, let me walk you through how we are using it and why.

Our goal with this initializer is to create a Coordinate with values we have extracted from the user defaults. Before we try to set each of our axis to a value, we want to make sure a value even exists. That is where guard comes in.

We are checking to see if our optional parameter was passed in or if we have nil. If we have nil, we don’t want to have to go through a bunch of conditional logic to verify that yes, we are doing nothing with our value. A guard statement only executes a line of code if the condition is not met. We want to return nil if we know that no parameters were passed in, so we can cut to the chase and do that immediately at the beginning of our block of code.

Once we have established that our NSDictionary was not nil, we now go through each value in the dictionary to make sure it correlates to a specific key. If at any point we encounter a key that does not have a value, we kick out of the whole thing and return nil.

By using a protocol to implement this functionality, we are able to specialize and reuse these concepts for other value types in our software. Before, we would have had to make a superclass or a delegate with methods that were required to be overridden by the subclass. By allowing structs to conform to protocols, we are able to specify functionality that we need in multiple places but with different implementation.

Map, Filter, and FlatMap

It would not be a shiny Swift blog post without the obligatory section on the functional features of Swift.

Just to clarify where we are at at this point in the code. NSUserDefaults is an NSDictionary where the key is the name you assign to label what you want to store. In our case, we want to store saved coordinates, so our key is “savedPositions”. The value is an array. The array can contain any object. Our Coordinate is not an object because it’s a struct, which is why we convert it to an NSDictionary. So, in theory, our NSUserDefaults should have a key-value pair where the key is “savedPositions” and the value is an array of NSDictionary objects that represent Coordinates. Simple, right?

Wouldn’t it be really cool to be able to filter through the array we pull from the NSUserDefaults to make sure we have an array of only the objects of the type we want? Sadly, there isn’t.

Of course there is. If there wasn’t then either that sentence wouldn’t be there, and or I would be a sadist. The jury is still out on that last conditional.

func extractValuesFromPropertyListArray(propertyListArray:[AnyObject]?) -> [T] {
    guard let encodedArray = propertyListArray as? [NSDictionary] else {return []}
    return encodedArray.map{T(propertyListRepresentation:$0)}
                       .filter{ $0 != nil }
                       .map{ $0! }
}

In the extractValuesFromPropertyListArray function, we are accepting an optional argument of an array of any object and returning an array of our generic return value. We also are specifying our generic return value must conform to the PropertyListReadable protocol.

The first thing we need to do is make sure we actually received a value. If we didn’t, there is no point in filtering an array that doesn’t exist. Our first line of code checks to see if we have a value and if that value can be cast to an array of NSDictionaries. If we don’t or we can’t, we return an empty array.

If that passes, we go ahead and filter the array. We use the .map function (which iterates through an array, applies a function to it, then creates a new array from the results) to run each value through our propertyListRepresentation initializer we created in our Coordinate extension. The propertyListRepresentation either returns an optional Coordinate or a nil.

We then apply a .filter to our results. We check to see if each item in the array is not nil. If it is nil, we throw it away. We then create a new array of just optional Coordinates.

Finally, now that we have ensured that we don’t have any possible nil values, we use another .map to unwrap each value and return and array of Coordinates (or any other structs we extend with the PropertyListProtocol).

This is really inefficient.

The function extractValuesFromPropertyListArray was refactored to the following:

func extractValuesFromPropertyListArray(propertyListArray:[AnyObject]?) -> [T] {
    guard let encodedArray = propertyListArray else {return []}
    return encodedArray.map{$0 as? NSDictionary}
                       .flatMap{T(propertyListRepresentation:$0)}
}

It was a real shame in our previous version of the code that if we had an array of mostly NSDictionaries, but if some stupid NSData object (which could be a malicious program) somehow snuck into our array, we had to throw away all of our other valid values. Since we’re going to filter through our results later anyway, we just want to verify we have an array of anything.

Since we don’t filter for NSDictionaries in our first line of code, we need to move the filter to our second line. Now our first .map statement is checking to see if each item can be cast the an optional NSDictionary. If it can, it gets added to the new array. If it can’t, it gets kicked to the curb.

Our previous code had a convoluted setup to be able to apply a function, filter out the nils, then unwrap the coordinates. This is a common enough thing that there should be a more concise way to do this. There is, and that is using .flatMap. Flat Map does exactly the same thing as our previous three chained functions in one handy dandy function call. Huzzah!

Saving to Defaults

We have one last part left to our property list loading and unloading. We’ve verified that everything we are extracting to the defaults is safe. We now have to verify that everything we are sending out to the defaults is safe.

One last little block of code:

func saveValuesToDefaults(newValues:[T], key:String) {
    let encodedValues = newValues.map{$0.propertyListRepresentation()}
    NSUserDefaults.standardUserDefaults().setObject(encodedValues, forKey:key)
}

For our parameters, we are taking an array of values that conform to T:PropertyListReadable and a string value to use for our key.

We’re creating an array of encoded values by taking the array parameter and mapping each one using the propertyListRepresentation function to turn it into an array of NSDictionaries. We then run the result through the setObject:forKey function associated with the NSUserDefaults.

Conclusion

I created a playground that contains all of the code I spoke about in the second half of this post.

When Brad showed me the extractValuesFromPropertyListArray function, it made my head explode. I saw the .flatMap() function and the guard statement, I felt stupid and inadequate. I felt despair that I would ever be able to come up with this stuff on my own. I can look at code and kind of grok what it means, but reading and understanding something are different than actually coming up with it.

After a while of struggling with the code, I realized I was asking the wrong questions about it. Rather than asking “how” it worked, I should have been asking “why” it was written that way. I talked to Brad about how we were dealing with the user defaults in the original code. He told me about the issue he had with it that I detailed in the first half of the post.

That is when a lot of this stuff began to click into place for me.

We don’t have this complicated code because we’re trying to be clever and use all the new toys in Swift. We are doing the code this way because it solves a problem that we had that could not be solved with Objective-C.

We could have used a “for-in” loop instead of the .map() function. We didn’t have to use .flatMap(), we had a longer implementation of it.

I have been approaching learning Swift all wrong. I was trying to take concepts like currying and trying to find ways of cramming them into my code so that I could understand how they worked. Our code is elegant because it had a specific set of problems it needed to solve that either were not solvable any other way, or would have resulted in more lines of code that would have taken more time to run because it wasn’t optimized.

For me, I took two lessons from this:

  1. Instead of spending more time thinking about clever ways to use shiny new features, I should spend some time thinking about what problems I had to solve.
  2. Just because my code “works” doesn’t mean it can’t be better. There might be “easy” ways to get something running, but there might be better, more elegant ways to write your code.

Yes, it’s overwhelming keeping up with all the new language changes and feature out there, but there can be great features that can make your code better that you never discover if you just decide your code is done once it compiles.

Learning How to Cook: June 2015

My ex-husband moved out of the house at the end of January of this year. We were married for just over five years. During those five years I think I only made dinner twice.

My ex-husband was a disciple of Alton Brown and he was obsessed with cooking. He bought a sous-vide. We installed a gas range in the kitchen. We regularly went to the knife shop downtown so he could get his knives sharpened and buy new kitchen gadgets.

It was also something of a living nightmare.

IMG_1888Shortly after my ex-husband turned 30, he was turned onto the Paleo diet. All of a sudden, rice, bread, and potatoes disappeared from our house. Dinner became a 12 ounce steak with three brussels sprouts. If I tried to take more than three I got yelled at for being greedy.

Food became scare around the house.

No one tells you this, but doing Paleo is an assload of work. You pretty much have to prepare a whole meal every night because a lot of the Paleo foods aren’t really designed to be eaten leftover. One night we would have lamb chops, the next I would be scavenging for food after a long day at work to be told that I could eat all the salad I wanted. Fuck that.

I started hiding food around the house.

My ex would find my food and eat it and complain to me about how having it around threw him off his diet. Once he ate a bagel that threw him off his diet, well then he was already off and why not go out and get Chinese food?

My dad has been on the opposite diet most of my life. His diet consists primarily of beans and brown rice. I remember as a teenager being told by my dad that a cheeseburger I ate on the way home was going to kill me. My dad and my ex-husband would have fights that would almost come to blows over which one of them was wrong. Both were convinced the other was going to drop dead any day because they were eating poison.

Thanksgiving was the worst.

IMG_1895My ex-husband insisted on doing all the cooking (expect for pie, which he let our mothers take responsibility for). He would spend a week brining the turkey, which had to be specially pasture-raised, making a starter for the bread, and creating his own stock. When Thanksgiving would actually happen, he would spend twelve hours stressed out of his mind trying to get a meal done that no one would eat because everyone filled up on cheese and crackers waiting for dinner to get done. I usually would steal two bottles of wine and hide in my childhood bedroom watching Doctor Who.

I decided when he moved out that I was not putting up with this shit anymore. I spent my life being told by my dad I couldn’t eat cheeseburgers and being told by my husband I couldn’t eat bread. Fuck all of this. I did not want to cook. I just wanted to live off of prepared food I found at Costco and the grocery store.

This went great for a while. I got to eat all the stuff like lasagna I hadn’t been able to have in several years. Everything was awesome.

Until it wasn’t.

I noticed after a while of doing this that I was getting tired of the food I had available to me. Even stuff that i liked tasted kind of processed.

One day a few months ago, I went to Costco to pick up my food for the next week or so. Nothing looked appealing. I was tired of everything I saw.

Then I noticed that they had boneless skinless chicken thighs. They came in six packages of four. One of the biggest things keeping me from figuring out how to cook was trying to figure out how to debone chicken. Seeing that I could get packages of about a pound of deboned chicken to include in various recipes removed an obstacle I had mentally about figuring out how to cook.

IMG_1940I picked up ingredients for food rather than food. I walked out to my car and looked in my trunk with a modicum of despair because I was pretty sure I was not going to have food for the next week or so because I wouldn’t feel like cooking anything.

Fast forward two months.

I actually have gone through most of my chicken. I had to throw one package out because I forgot to use it in time. Other than that, I actually made food.

I have done a lot better at making food for myself to have for lunch than I feared I would. I have been slower than I wish I had been. I am hoping to learn to do things faster.

One thing that always amazed me about my ex was the fact that I would look in the refrigerator and not see anything for dinner. He used to be able to look in there and say, “We have X, Y, and Z, which means I can make Foo.” I never understood how he did that.

I understand now.

I control everything that I have in my kitchen.

I have a certain number of things that I keep in stock so that I can construct meals out of them.

I have a few meals that are basically all the same ingredients but have different spices in them. I really like stewed chicken. I can make a chicken stew with a bunch of veggies and either add curry roux or some other spice mixture and have two different meals.

IMG_1924I have also figured out how much you can do with a friend egg. I never ate fried eggs until I married my ex. I always found eggs to be rather gross. I discovered that if you break the yolk over something, it makes a sauce and you have an instant meal.

I cook sweet potatoes with onions on Sunday mornings and it usually makes 2-3 servings. I reserve one serving and eat it later in the week.

I know I should probably not waste my time each week making a meal. I should spend my time working on my app or working on my conference talks. But you know what, I don’t care. For the first time in my life I can control what I eat. I think both my father and my ex were wrong about how they ate. I think food is more than just what you put in your body. I think it can feed your soul. I think sitting down to a nice meal that you enjoy that you made yourself has its own healing properties. I don’t want to spend my life thinking I shouldn’t have eaten that piece of bread because bread is bad for you. I want to think about how enjoyable it was to feel the crust crunching between my teeth and feeling the butter oozing off of it and I scarfed it down. I don’t do that every day. I don’t want to be on my deathbed and think about all the food I didn’t eat because I was worried about losing five pounds.

It’s been interesting to me to slowly expand the boundaries of what I can do. The first time I made curry it was scary because I never really worked with raw chicken before. I never cut it up or dealt with cooking it properly. To be fair, braising chicken isn’t that difficult to do. Then again, the enjoyment of a meal shouldn’t be determined by how difficult it was to prepare.

I am glad I don’t have to eat another piece of undercooked pork or unreasoned beans and rice ever again. I can control what fuel I put in my body and knowing that I have more options than I did six months ago makes me feel awesome.
IMG_1918

Soul Searching

January, 2014

I began my programming career in late December 2013. It started something out of necessity. Sometime around October I suffered from a nervous collapse that made it impossible for me to focus on my school work. I had dropped out. I was lying to my husband about dropping out of school because I was gambling on my ability to find a job around the time I was supposed to graduate. I was very lucky and something came through.

My only hope for my first job was that I would find something in iOS. In the Madison area, that was a pretty stiff order. Madison is a lot of enterprise Java, government, and health care.

I managed to find a job at a start-up where I was the oldest person by a decade. I was partially hired because my bosses were not old enough to drink and didn’t know any better about hiring people who have actual experience.

By January, I knew this wasn’t working. I didn’t get along with my programming partner and I knew I was going to be let go. I was okay with that. I knew it was a bad fit.

I did some soul searching at that point. I knew it was bad to lose your first job after two months and I did have some concerns with my long-term ability to be hired. I had a few choices. I could kind of fake it and find another, similar job where I would be equally uncomfortable, but possibly be able to fake it better. Or, I could acknowledge that I was in the weeds and I didn’t know what I was doing.

The people around me didn’t know what they were doing either, but I had enough training and visceral awareness to know that my programming sucked. I knew it could be better and I knew it would never be better if I continued to pretend like I knew what I was doing.

I sat down and started thinking about what I wanted from my career. There was only one thing I absolutely knew I wanted. I wanted to be Brad Larson.

Brad, for those who have not heard my enthusiastic ramblings about him, is the creator of GPUImage. Brad taught the Advanced iOS class at MATC the first year it was offered. The classes were, and are still, available to watch on iTunesU. While I was a student I heard a lot of stories about him. I heard about how Apple engineers told him that something he wanted to do with his Molecules app was physically impossible to do on the current hardware. He figured out a way around the limitation and he made it happen. He was the guy who did impossible things.

I didn’t know if it was possible or how long it would take, but I wanted that. I wanted to understand the language well enough that I could figure out a way around the limitations. I wanted to be a great programmer.

I reached out to Brad and told him that I wanted to do what he does and asked him for advice about how to get started. He was very kind and wrote a nice email back. A few weeks later, a contract opportunity became available to work with him on an extension of his Molecules app. I knew I was on my way out at my current job, so I reached out to him. I told him that I didn’t know anything but that I wanted to. I really wanted to make sure I didn’t misrepresent myself because I wanted to learn and I couldn’t do that if I pretended to know things I didn’t.

After this contract job, I spent time working on a book with Chris Adamson and doing a lot of conference talks. I was trying to get my name out there so that I could find a job. I talked about GPU programming and Metal because they were new things. I didn’t really explain them as well as they should be explained because I didn’t have enough experience with them to fully understand them. I gambled on talking about difficult and obscure technology to try and differentiate myself from all the other new programmers out there.

To my shock and surprise, Brad reached out to me about working for him as my speaking obligations were winding down. I did it. I accomplished the short term goal I made at the beginning of the year to find a programming job with a great programmer so that I could get better and be a great programmer too.

January 2015

Let’s jump ahead a year.

At the beginning of this year I initiated a divorce with my husband. Things had been difficult for a long time. My goal for a few years had been to find stable employment that would allow me to end the marriage.

I do not want to badmouth my ex-husband. Our divorce was amicable. He was a friend before we were married and he continues to be a friend. We had a lot of trouble and I honestly wish him no ill will.

I am bringing this up simply to establish that the last six months have been very difficult.

I have never taken care of myself.

I lived with my parents until I was 27 years old. I was essentially a perpetual student because I didn’t really understand how to find a job or support myself. I moved from my parent’s house to my husband’s house. The first few years I was working I had my husband manage our money because I was earning minimum wage and I did not want to know what my weekly paycheck was because I was afraid if I knew how little it was, it would be easier for me to mentally justify calling in sick when I didn’t feel like going. I was unemployed from 2012 for most of the rest of our marriage. I have never budgeted my money. I have never paid my own bills. I never lived on my own. I don’t think I filed a tax return until I got married because I earned no income.

The last six months have been difficult. It’s been hard trying to learn things that most people knew when they were 16. It’s been hard being away from my pugs so much every day. My house is still a mess because I am simply too tired and demoralized to clean it. I don’t think I’ve put my laundry away since February. My ex-husband was actually so appalled by my inability to care for myself that he cleaned my kitchen one day when he was here picking up some of this things.

The last six months have been physically and emotionally exhausting. I have had bouts of depression that I have spoken about on this blog before. It’s been rough.

Because things have been rough, I have been letting a lot of things go. One of those things has been my focus on my long-term goal of being a great programmer.

I have barely been getting by.

I have had weeks where I have barely gotten anything done. I have felt a great deal of self-hatred and fear about losing my job and independence.

At a certain point it became easy to rest on my credentials. I wrote a book. I was invited by Saul Mora to interview people for NSBrief. I had lots of people who knew who I was. I was given some cache for being a great developer because I had credentials. I didn’t want to think about how little I actually knew because it was too fucking demoralizing to deal with. So I pretended. I even convinced myself that I was as good as I needed to be. I got careless. I stopped trying because it was just too hard to deal with.

Now

I am not doing this any more.

I am tired of what I have been doing for the last year.

The reason I told my long, rambling story at the beginning of this post is because I feel like I am back there now. I feel like I have two choices about how I can proceed from here.

I can either decide that I learned enough and keep hiding behind my credentials. I can learn fast enough to keep up with things, but I won’t ever become the developer I wanted to be. I will have to keep pretending like I know more than I do.

I don’t want to do this anymore.

I want to be very clear about a few things.

Chris wrote most of the book. My name is on the book and I wrote three chapters from the book. I wrote the Debugging, Testing, and Photos chapters. Two of those chapters didn’t really require me to add much to the code base. When I had to tackle the Photos chapter I had to fly out to CocoaConf Boston to work directly with Chris on that chapter because I was not familiar enough with the code base to write the chapter by myself. I needed help with the Core Image code.

Chris worked on the book for two years before I was brought on. I think my presence played an important role in getting the book done. I contributed to the book. But, I feel that I have received more credit for the book than I am due. I haven’t read the book all the way through. I am not comfortable with most of the concepts in that book.

I am tired of waiting around for someone to figure out that cut to the front of the line. I am going to be proactive and admit that I don’t really know that much. I have never written an app of my own. I have focused on some very obscure and esoteric low level programming. For a developer who has only been working for a year and a half, I am fairly advanced. However, I have a long way to go.

I have realized that I have been squandering my opportunity of working with Brad by being too proud and afraid to ask him for help. I have been ignoring things that I don’t understand. Yesterday I asked Brad about what provisioning was. He could have explained it in a sentence. Instead, he took an hour to show me Instruments and how it could be used to analyze one of his projects. I felt like my world went from 2D to 3D. I realized that there was a whole dimension of being a programmer that I used to be aware of and wanted to explore that I had abandoned because I was tired and demoralized and didn’t want acknowledge how little I know. I felt exhilarated and deeply, deeply ashamed.

I do not want to be afraid anymore.

I am working on my own personal application. I am going to do my best to write about that process on this blog. I will be talking about concepts that are probably covered in the book that has my name on it. I will talk about things that most people who have been programming for five years already understand.

I want to go back to the spirit this blog was created in. I created it to document my progress as a student to a professional. True to my roots, I am a perpetual student.

I am going to ask more questions. I am going to delve deeper and try to understand better. I made time for what was important for the first half of this year. Now I need to get back on the track I decided a year and a half ago. I need to stop worrying so much about my exposure or my reputation and worry more about my skills. If my reputation suffers because I want to shore up my weak points, then I probably deserve it. It’s painful to admit that you don’t measure up, but if you won’t accept reality then you can’t change it.

I hope that Brad will continue to be patient with my questions and continue to go the extra mile to expose me to things I wouldn’t have thought of otherwise. His commitment to excellence pushes me to be better and even though it is painful sometimes, it is something I asked for that is rare in this day and age.

We Didn’t Start the Fire(Wire)

I have written about this before, but at my current job my boss and I are rewriting our robotics control software in Swift. This is an excellent blog post here that explains why we are doing this.

This is the camera setup we have on our robotics systems. Cameras help with dispenser positioning and we support both video and image capture for our users.

This is the camera setup we have on our robotics systems. Cameras help with dispenser positioning and we support both video and image capture for our users.

There have been a few projects we have open sourced after implementing them in this project. This blog post details the most recent project we have completed and open sourced, which was to write a wrapper class allowing us to connect to an external camera that conforms to the IIDC standard. This project can be found here.

Cameras are an important feature in our robotics systems. Users use the camera to help position their dispensers and to capture media. Videos and images of the dispensing process have been used in papers and documentation of scientific research, so continuing to support this functionality is vitally important.

What is the Goal?

Back when the code was initially written in 2007, AV Foundation and GPUImage did not exist. There was not really an easy way to hook up an external camera to an application. Additionally, the standard for rapid data transfer at the time was Firewire.

The fact that there were no easy solutions meant that our code was overly complex. There were much easier ways to connect to a camera and run the video through a filter that we simply couldn’t implement because our code touched too many other things. We set out to simply the code in our rewrite.

One major goal of this project was to make it easier to add additional cameras while still supporting the legacy cameras out in the field.

Since this company has been around for over a decade, we do have legacy hardware out in the field that we still need to support. Currently we have three different kinds of cameras out in the field associated with our robotics systems: Unibrain, Point Grey Flea2, and Point Grey BlackFly. At some point in the next year or so we will need to support a fourth camera because our current camera, the BlackyFly, has been discontinued.

What is IIDC 1394?

IEEE 1394 is a serial bus standard for high speed, real time data transfer. USB is another serial bus standard that is more widely adopted because IEEE 1394, aka FireWire, was proprietary to Apple.

Our first camera type, the Unibrain camera

Our first camera type, the Unibrain camera

Even though FireWire ports are no longer available on Macs being sold today, there are still many cameras that conform to the IEEE 1394 standard. Our current Point Grey BlackFly cameras have a USB 3 plug but they conform to the IEEE 1394 standard.

IIDC is the FireWire data format for live video. In order to be able to interface with an IIDC compliant camera, we have to conform to their standard.

There is a library to interface with IEEE cameras, libdc 1394. We have integrated that library into our project and adapted it in order to be able to communicate with our cameras. This library’s functionality is what we are wrapping in our GPUImageIIDCCamera class.

We did not integrate the GPUImageIIDCCamera class into the primary GPUImage framework. The libdc 1394 library has less permissive public licensing than GPUImage has, so for legal reasons, the class could not be merged into GPUImage proper and must remain a separate entity.

Objective-C? Why Not Swift

Taking a legacy piece of software that integrates with hardware is something of a challenge. Since Objective-C is a superset of C, there was a lot of low level C programming that could easily be integrated into the previous iteration of the control software that now presents some challenges when we attempt to implement them in Swift.

One such challenge was figuring out how to interact with our hardware. Prior to attempting to connect and control our camera, we had to determine how to talk to our micro controller. We were able to do this within the current constraints of Swift, but there is one feature of the C language that Swift does not yet support, which is mutable function pointers.

Since this was an integral part of our process, it was necessary to write this class in Objective-C. This, for the record, is the first time in our six-month process where we encountered a problem that we could not code in Swift. This didn’t prevent us from being able to implement this feature, it simply meant that we had to finagle a few things to fully integrate the Objective-C class into our control software code.

What do we Need the Code to do?

These are several things we needed this class to accomplish:

  • Connect to the camera
  • Capture frames
  • Set up the proper video format for the camera type
  • Remap the YUV colorspace to RGB colorspace
  • Get and set camera settings for things like brightness and saturation
  • Handle camera disconnection

Challenges

One of my personal challenges was simply understanding the code. Since much of our functionality would be done differently in the new code, I couldn’t just port it over from the old version of the software. It was important to get a sense of how to wrap the IIDC functionality in such a way that it would be easy to implement new cameras into our process. It was also important to figure out what lifting would be done by GPUImage and what would be done by the IIDC camera class.

Our current camera, the Point Grey BlackFly

Our current camera, the Point Grey BlackFly

Additionally, Brad did some extra work on our version of libdc1394 and his changes had not been documented. I couldn’t use the general documentation, what little of it there was, for the code.

Initially we thought that we would not need to use any OpenGL to process the video frames. It was later determined that a shader would be necessary for finding the frame size. This was beyond my present OpenGL experience, so Brad needed to write the necessary shader to accomplish this.

We also had to deal with different video modes. There are about thirty types of video modes we have access to, but all of these boil down to one of two types: Format 7 or anything else.

Format 7 allows you to set the frame size and the colorspace. All of the other video modes specify those things in their mode name.

Point Grey Flea2 camera mounted on our Desktop system

Point Grey Flea2 camera mounted on our Desktop system

Not all cameras support Format 7. Our first camera, the Unibrain, does not support Format 7. So we needed to make sure we were able to connect and use both Format 7 and non-Format 7 cameras.

We also had to deal with the fact that we were talking to a piece of hardware. Those settings, along with brightness, saturation, and others are all set on the physical piece of hardware. We can communicate with the hardware using C functions, but the point of wrapping this class is to avoid having to touch the messy underlying C library.

Each property associated with the camera that we can set has overridden getters and setters. We override them in order to make sure the camera and the application are on the same page about what each expects the settings to be. When you drop this class into another application, it appears to work the same way for the programmer with all the nasty bits tucked away in accessor methods.

Final Thoughts

When I worked on figuring out libxml2 at the beginning of the year I thought that was the hardest thing I would work on. That was just a warm-up for this project.

This was a huge challenge for me personally. I think trying to figure this out has been the hardest thing I have done in my career so far. In addition to how difficult this has been, not working with Cocoa since 2014 has made trying to get back in the swing of Cocoa development has been a bit of a challenge.

I hope that as I progress in my career it gets easier for me to pivot from low to high level development more easily. I wish I could have done this entire thing by myself, but I understand that we have deadlines that need to be met. I am proud of the amount I was able to do here and the growth I have experienced as a programmer by pushing myself to work on something this difficult.

Why I Hate “Up”

Look! If you look quick you'll see my life fly by!

Look! If you look quick you’ll see my life fly by!

This morning I was reading this piece by John Scalzi. There are a lot of people angry about the last episode of Game of Thrones that seems to have a rape scene in it that serves no narrative purpose. As opposed to all the other rape scenes that somehow serve narrative purpose. Bygones…

For years I have been telling people, mostly men, that I hate “Up”. I am angry that the only female character in the whole movie dies within the first ten minutes. I am met with looks of disgust from these guys who all tell me that I obviously missed the point of the movie.

My annoyance has been rattling around my head for many years, but I was never really able to articulate the exact words as to why it pissed me off so badly. This quote from Scalzi’s piece really helped to crystalize in my brain why I hate “Up”:

I can’t specifically remember what the story idea was, but I vaguely recall it being some sort Silence of the Lambs-esque thriller, in which an investigator and a serial killer matched wits, you know, as they do. And at some point, I dragged the investigator’s wife into the story, because, as I was, like, 24 years old and didn’t know a whole hell of a lot, I thought it would be an interesting character note for the investigator, and a good plot development for the book, for the serial killer to basically rape and torture the wife.

I thought it would be an interesting character note for the investigator.

Women in Refrigerators

The idea of the wife/girlfriend/mother being attacked by the villain is not a new observation. There is an entire trope around it.

When you have something as blatant as Gwyneth Paltrow’s character being beheaded in “Seven”, it’s obvious that the character serves absolutely no purpose other than to be red shirted. No one makes the argument that her character was somehow a vital and important catalytic character in the movie when I am pretty sure she gets more screen time than Ellie does in “Up”.

I would like to argue that Ellie is not simply a woman in a refrigerator. She is part of a more pervasive trend that I have noticed in story telling where you still have flat female characters, but that somehow they have some holy purpose in that their existence saves the hero in some form or fashion, even if they can’t save themselves.

Coughing, Radiant, and Disposable

The next iteration of the Manic Pixie Dream Girl is the idea of the consumptive heroine. You have literal consumptive heroines like Nicole Kidman’s character in “Moulin Rouge” and Jessica Brown Findlay’s character in “Winter’s Tale”. This trope also bleeds over into any other instance where you have a female character dying of some kind of incurable disease whose death is used to enlighten the main character.

EllieDyingAgain, many of these films are very poorly done, so you don’t get a lot of people defending Jessica Brown Findlay’s death in either “Winter’s Tale” or “Downton Abbey.” Her deaths are more symbolic of something other than who she was as a person. In Downton it was to remind people that childbirth is treacherous and that her dad is a backwards asshole who won’t listen to the wise advice of a man of modern medicine. Her death services Lord Grantham’s character development rather than her own and acts as an After School Special about the dangers of preeclampsia.

Ellie doesn’t just die. She dies in the first ten minutes of the movie. When I looked up the film they didn’t even list the voice actress who played her at the beginning. She literally has no voice. The vast majority of her time on the screen is part of a musical montage where you see her lose her baby, get sick, and die.

Ellie for all intents and purposes dies in the cold open. If Up was an episode of CSI she would be the body they find at the beginning before the obligatory opening credits sequence blasting a song by The Who. No one would argue that the body at the beginning of the episode is the most important character in the show, yet so many people I talk to argue about how important Ellie is and how it could be argued that the movie is actually about her.

Again, this is getting closer to the heart of the issue, but it still doesn’t quite explain why “Up” bothers me so much.

Thanks for the Adventure, Now Go Have One of Your Own

This clip is what bothers me.

Here is my book of all the things I won't get to do! Huzzah!

Here is my book of all the things I won’t get to do! Huzzah!

I have already mentioned that Ellie loses her baby and eventually dies. She wanted to travel the world. She never gets to go on any adventures. This isn’t uncommon. When I was a kid I wanted to be the first female president. I know at least two people who went to college and studied rocket science because they wanted to be astronauts but never made it into space. Most people don’t wind up living the life they plan to lead. Sometimes the things we do today didn’t exist when we were children. There were no cell phones when I was a kid. The possibility of doing this didn’t even exist when I was trying to figure to what I wanted to be when I grew up. We all grow up and most of us wind up doing something different than what we thought.

It bothers me that somehow, we are supposed to have our heartstrings tugged by the fact that Ellie is satisfied with her “adventure” of being married to Carl for the last fifty years. There is nothing wrong with that. What bugs me to no end is that somehow, we’re not supposed to think that he should feel the same way.

“Thanks for the adventure. Now go have one of your own.”

So marriage was enough of an adventure for Ellie, but it isn’t good enough for Carl?

So much of pop culture revolves around the male midlife crisis. For an example, let’s look at the movie “American Beauty.”

Are you the plot device that is supposed to give my empty life meaning?

Are you the plot device that is supposed to give my empty life meaning?

The main character, played by Kevin Spacey, lives a meaningless existence. He is trapped in a sexless marriage with an anal retentive shrew who makes it clear to him that he has disappointed her. He works a dreary job that he hates where he gets no respect. Then he meets an underaged girl who gives his life meaning. He realizes he shouldn’t have settled for this dreary, miserable life. He buys a sports car, gets fired from his job, then goes to work at a fast food place so he can be stoned all day.

There are no stories about middle aged women who wake up one day and realize that they’re trapped in a marriage with a family they don’t want. That privilege is reserved only for men. Women are supposed to smile and nurture and never convey that they miss their lost youth when anything was possible. A guy can say he wishes he’d never had children but a woman who says so is a sociopath.

It bothers me that the writers of “Up” basically just made Ellie a plot device. She’s a consumptive heroine. She leads a perfect, blameless life where she is simply happy to have lived then died to teach Carl how to live.

How much more compelling would Up have been if Carl had been the one to die? Watching Ellie learning how to live after losing Carl would have been just as, if not more, compelling as watching Carl go on his adventure. Would the writer have been brave enough to have Carl leave the message to Ellie thanking her for the adventure? Do we assume that women have lower hopes and expectations for their lives than men do?

We're holding hands because this is a Disney movie and we can't show any more than this.

We’re holding hands because this is a Disney movie and we can’t show any more than this.

Pixar generally makes great movies, but I feel like they really drop the ball on thinking about female characters. We finally got a movie around a female character and we wound up with Brave, which figures that if you give a girl a bow and arrow you don’t have to give her any personality. There is no reason that every main character in most of their movies has to be male. It’s just the default.

I am very excited for “Inside Out”, the next movie that Pixar is coming out with. It is the movie I have been waiting for Pixar to do. The movie takes place inside the mind of a tweenaged girl who is going through life changes. The main emotional character is played by Amy Pohler. This movie could have had either a male or a female main character and they picked a girl. I am hopeful that this film will start to make up for all the lazy female characterizations over the last twenty years.

Death Handled Well

There is a right way to handle death as a piece of character development. The best example of this that I can point to is from the pilot of “Star Trek: Deep Space Nine.”

In DS9, Benjamin Sisco’s wife Jennifer isn’t killed as a catalyst to either hurt or save Benjamin. Her death is tragic. She is killed by an anonymous enemy that destroys thousands of people. She is also killed in the first few minutes of the episode, but her death differs in some key ways.

She isn’t some inspiration to Benjamin about how important life is and to catalyze a moment of self actualization. Benjamin is a husk of a man after he loses her. He raises their son alone while he tries to cope with the trauma of losing her. Her death doesn’t inspire him. Her death arrests him. The entire episode is about showing how he can’t move on from the moment he loses her.

I can’t find a clip of this scene, but it’s brilliant and I strongly recommend watching the whole episode just for this scene. Here’s a transcript of what is said:

SISKO: What is the point of bringing me back again to this?
JAKE: We do not bring you here.
JENNIFER: You bring us here.
TACTICAL: You exist here.
SISKO: Then give me the power to lead you somewhere else. Anywhere else.
OPAKA: We cannot give you what you deny yourself. Look for solutions from within, Commander.
SISKO: I was ready to die with her.
TACTICAL: Die? What is this?
JENNIFER: The termination of their linear existence.
(and she puts her hand on his cheek)
TACTICAL: We’ve got to go now, sir.
SISKO 2: Damn it, we just can’t leave her here. Oh, no!
SISKO: I never left this ship.
JENNIFER: You exist here.
SISKO: I exist here. I don’t know if you can understand. I see her like this every time I close my eyes. In the darkness, in the blink of an eye, I see her like this.
JENNIFER: None of your past experiences helped prepare you for this consequence.
SISKO: And I have never figured out how to live without her.
JENNIFER: So you choose to exist here. It is not linear.
SISKO: No. It’s not linear.
(and he finally starts to grieve properly)

We’re not meant to think of Jennifer as a fully fleshed out character. She is a plot device whose specter looms over the whole episode. Benjamin is stuck and can’t move on from her death. The inability to move on from a tragedy is a powerful story that all too many of us can identify with that is rarely explored in media.

Now just make sure you don't go talk to your other selves or else we will have a time paradox.

Now just make sure you don’t go talk to your other selves or else we will have a time paradox.

The difference between Jennifer and Ellie is that we are supposed to somehow feel that Ellie is a main character who had a fully fleshed out life and existence. Even though she dies in the first ten minutes, we’re meant to think that somehow because she considered her life an adventure it makes up for the fact that she conveniently disappears ten minutes in so we don’t have to worry about her pesky emotional wants and needs.

I guess I also think it’s different because I feel like Ellie was tortured before she died. She didn’t get to live out her dreams. She lost her baby. She got sick and died. She had this miserable series of misfortunes and at the end we’re supposed to feel like it’s okay because she says she had a great adventure.

I am okay with Jennifer not being a fully formed character in DS9. No one is making the argument that she is. Sisco is the only captain on Star Trek who married and had a family. Showing the story of an African-American single dad is a story we basically never see. I am not going to quibble about Jennifer getting the short straw on this because it opens up another, richer story vein. Avery Brooks shows more naked grief in this clip than Carl does in the whole movie. Any time we can show any man, let alone an African-American one, cry from grief without being shamed for not manning up is okay by me. We need more of this.

Bringing it Back Around

So what was it about John Scalzi’s piece that really crystalized these thoughts for me?

I thought it would be an interesting character note for the investigator.

Someone who came up with the story for Up decided that killing Ellie would be an interesting character note. Her character was made to be this perfect woman that any man would love to be with. Her purpose was to make Carl happy and to have no agency of her own. Someone thought that having her die would be an interesting story note for Carl. There were no other female characters in the whole movie except for Kevin, who is assumed to be male for most of the movie.

All the men who come up to me and tell me that I obviously didn’t understand what the movie was about are coming from this perspective. They put themselves in Carl’s shoes and think about how happy they would have been to have had a perfect girl save them and be with them for fifty years and think that the life they led together was enough.

Me, I saw this movie when I was unemployed and I had no idea what I was going to do with my life. Seeing this woman who was very much like me give up on everything she wanted to give up and die chilled me to the core.

I did not want that to happen to me.

I did not want to lower my expectations to the point where I would give up on ever doing anything with my life. I have fought for over five years to try and make something of myself because I knew that I would not be happy having the life that Ellie led. I dare say most women would not be happy leading that life. Some men want to believe that women don’t have any aspirations beyond getting married and having a family because it absolves them of any responsibility for situations they are unhappy about. It allows us to think that somehow men and women want different things. Men want to be free and have adventures. Women want to settle down and nest. Somehow it’s not possible for both men and women to want the same things.

I think that we are limiting ourselves by writing off the other gender as unknowable and stereotypical. Not all women want to have children and not all men want to be perpetually single. If you go through life without trying to put yourself in another person’s shoes, you will miss a lot of the things that make life amazing. You might accidentally answer a personal ad from your wife because you never thought she might like pina coladas and getting caught in the rain.

up-pixar

The Trick to Forgetting the Big Picture is to Look at Everything Close-Up

Any sufficiently advanced technology is indistinguishable from magic.
– Arthur C. Clarke

Back when I was a programming student, my teacher Eric told me that over the years he has learned and forgotten a dozen programming languages.

At the time, it was inconceivable to me that anyone could learn and forget so much. Two years later, I am shocked to discover that he was right.

Two years ago when I really doubled down on learning iOS programming, I worked on it eighty hours a week. I was working through the Big Nerd Ranch iOS book. They had a series of about five chapters putting together a table view that would display a detail view populated by a singleton.

Every day I would wake up and code this over and over again. The first time I coded the examples, they made no sense. I typed a bunch of words that didn’t set off the compiler warnings, ran them, and magic happened. The second time was not much better. But by the third for fourth time, I began to realize, “Oh, I am creating this object because later when I load this detail view, I will be showing all the stuff I am keeping in this object. This is where it comes from.”

At the time Storyboards Interface Builder wasn’t particularly good for things. If you listen to many people online, their assessment of this situation has not changed. I used .xib files for each of my view and my custom cells and did all of my transitions programmatically. It took me weeks to wrap my head around all of these moving parts to figure out how they worked together. It wasn’t enough for me to just have something work, I really wanted to understand it.

Over the last year and a half, I haven’t really worked with user interfaces much. I had a contract job where there was no UI in Interface Builder because it was a legacy project from 2008. Then I spent a bunch of time running around like a chicken with my head cut off trying to figure out shaders, which are a tiny subset of a program. Then for the last eight months I have been working on porting another legacy project to Swift. We are just now getting to the point where I am working with interfaces again. It’s been over a year since I dealt with interfaces.

I am working on my first application. It is going to be rather limited to start off with, but I have plans to add additional functionality over time, so whenever I finally get it out, no, that is not the final product, more will come later, so don’t give me crap about it.

I am working with HealthKit. In HealthKit, there is a HKHealthStore that you are only supposed to have one instance of in your entire application.

I have been trying to figure out where to make that instance. I know that it needs to be accessible through the entire application and that you’re not supposed to make a bunch of instances of the same thing. I also know you have to pass it along to a lot of different places. I know many people don’t like singletons and I don’t want to create one of those, even though I am pretty sure HKHealthStore is a singleton. I was trying to figure out how all of the controllers can know about something while minimizing global state.

I talked to Brad about this a bit and he was talking about how it should be created in the root view controller for the application because that is responsible for the views that are controlled by it. As he was talking about all this stuff, it dawned on me that he was talking about the same things I was bashing my head against two years ago.

It wasn’t like I had spent a week mucking around with this stuff. I spent eighty hours a week for MONTHS trying to piece together how all this crap worked. I can’t believe that after spending all that time and pain on these concepts that they were buried in some far corner of my brain.

It also made me wonder about all the people who are learning programming now who use storyboards because, honestly, they are easier to get things done quickly. If you just push a couple of buttons and things happen like magic, how do you get a full understanding of what is actually going on? It makes me wonder about what else I don’t know about because I came into programming relatively recently. I know that my knowledge of memory management is bad because it was never something I had to deal with. I came in around iOS5/iOS6, so we had ARC and GCD and a lot of other things that abstract out a lot of the lower level programming stuff from you. Will understanding how root view controllers own detail views go the same way? I know talking to a guy at my first job he didn’t seem to understand this concept and it drove me crazy. I guess I have gotten to the point where I don’t understand it either.

It frightens me about how vast the knowledge is of everything that happens within the iOS ecosystem and how incredibly difficult it is to remember everything because really delving into the low level stuff means that you don’t know how to get things done quickly in the abstracted level. Sticking to the abstracted level limits your ability to do anything really customizable because you don’t see how the pieces fit together.

I am hoping that over the course of the next few years I can figure out a balance that works for me. I hope I can remember enough about how things work that I can deal with the abstracted layer without fundamentally forgetting everything.

Doctor Who: Series One- Father’s Day

PeteRose

I am probably going to retract this by the end of the season, but this is the best episode of Doctor Who so far. The first half of the season was acclimating new viewers to the Who universe and doing a lot of setup and stories that could only be done once.

This episode is the first real episode to explore what Doctor Who is capable of. Everyone wants to be the Companion and run away with the madman in the box. However, the strongest Doctor Who stories have always been character studies about specific companions and their own lives and stories. The fact that the “monster of the week” isn’t the Cybermen or The Master or some other outside force other than Rose’s desire to save the father she never knew makes this episode far more compelling than later outings with the Tyler clan.

It is my feeling since Stephen Moffat took over we are getting further and further away from actual stories about the Companions and getting more entrenched in JJ Abrams’ Mystery Box phenomenon. And no, this past season with Clara and Danny has not changed my assessment. It’s an improvement, but nothing dealing with Clara has has the same emotional gut punch that Rose, Martha, or Donna have had. For better or worse, I feel that Russell T. Davies had a much better handle on how to tell an emotionally driven story than Stephen Moffat has. If he would just make better wibbly-wobbly, timey-wimey puzzles for his story arcs, I would be happy.

So it goes.

Pete and Jackie Tyler

I believe this is the first time we hear about Rose’s father in the series. We have met her mum and her boyfriend, but her father is out of the picture. Until now we didn’t know if he just walked out on the family or if he was in jail or what happened. We never really thought about it. It makes sense that he would not have been spoken about much since he died so long ago. Time heals all wounds and since Rose never really knew her father, he was just this empty spot in her life.

You don't miss something until it's gone.

You don’t miss something until it’s gone.

It’s interesting to see how Jackie describes Pete to Rose as a child and how she reacts to him when he is still alive. She talked to Rose about all of Pete’s wonderful inventions and all the ideas he had when she was scornful of them while he lived. That is such a realistic touch to his portrayal because people have all kinds of quirks and idiosyncrasies that drive you insane that endear you to them later when they are gone.

My grandfather died when I was in my twenties. He and I had been close when I was a child but as he grew older we grew apart because he was basically an overgrown child himself. We didn’t get along and I was sad when he died, but I didn’t think I cared all that much.

When I went to the funeral the minister giving the eulogy talked about all the things he loved doing and all of my memories of childhood came rushing back to me. He was the first person who ever treated me like I was special and he was a good friend to me when I needed one as a child. I started sobbing hysterically because there were so many memories I had of him that I had packed away because our relationship was too painful that all surfaced after he was gone. Human relationships are vast things far more complicated and compelling than any time paradox could possibly be.

The Doctor and Rose

One thing that strikes me going back and rewatching this episode is how it begins. Rose asks The Doctor if he can take her anywhere and he tells her that her wish is his command. He should know better than to put the universe at risk by possibly creating a time paradox. He does it anyway.

Trying to avoid making a stupid "Harry Potter and the Prisoner of Azkaban" joke here.

Trying to avoid making a stupid “Harry Potter and the Prisoner of Azkaban” joke here.

You could make the argument that this is sloppy storytelling, that The Doctor behaves irrationally because the story demands it. However, it doesn’t play that way.

The Doctor cares about Rose. He wants to make her happy. He is willing to do whatever she asks because he cares about her. Later it dawns on him that she might only have agreed to come with him so that he would do this for her and it hurts him to feel that she used him. Their relationship is become more complicated because he is allowing his attachment to her to become way too personal. The behavior is irrational because emotions are irrational. He is angry with her, not for putting the universe in danger, but because he feels like she used him and doesn’t actually care about him the way he cares about her.

Oh god, you pissed off the Eccleston. Hopefully he won't walk off at the end of the season.

Oh god, you pissed off the Eccleston. Hopefully he won’t walk off at the end of the season.

Watching Rose uncomfortably go through their house ratting on about all the stuff her dad had that she heard about and the camera cutting back to Eccleston standing in stone silence is awesome. I have always said that it’s great in shows where when the main character is angry they get really, really quiet. In Battlestar Galactica when Adama has to reprimand both Starbuck and Tigh after their escape from New Caprica, he doesn’t yell. He just gets very, very quiet and says the most devastating things he possibly can. This choice to just show Eccleston pissed was fantastic. He’s so angry he can’t verbally articulate it.

In spite of how angry he is at Rose, he does everything that he can to try to save her father, even to the point of trying to sacrifice himself in Pete’s place.

Even though they go to a lot of trouble to say they aren’t a couple, they certainly act like one. Rose’s knowing look when The Doctor comes back for her is great until she realizes exactly why he’s come back.

Dude, where's my TARDIS? Yes, I deserve to be slapped for that.

Dude, where’s my TARDIS? Yes, I deserve to be slapped for that.

Also, I hadn’t remembered why The Doctor came back for Rose. Going and seeing him walk into the TARDIS and seeing that it was no longer bigger on the inside, then seeing the wheels turning in his head processing why it was like that before panicking and yelling, “ROSE!” was great. He’s mad, but she’s in danger and he’s not going to just leave her there, even though it’s her fault. Actually, I don’t think he had much of a choice considering the TARDIS couldn’t take him away anyway…

Rose and Pete Tyler

It’s interesting to me to see the dynamic between Rose and Pete change over the course of the episode. When she saves his life he gets rather uncomfortable with her attention to him. He has no idea that she is his daughter or that he was supposed to die. Seriously, if some stranger pulled you out of the way of a moving car and started at you expectantly and you didn’t know why, how would you feel?

I think it’s to the credit of the writer that Rose has to come up with reasons to stay with her dad by lying about going to the wedding and needing a ride. I always hate it in TV shows where people wind up doing extraordinary things for strangers with no compelling reason other than the story needs it to be done. In the TV show Leverage you see the main characters taking up jobs in four person companies and no one bats an eye as to how they got there or why they are there and it’s tremendously frustrating.

Even though a lot of trouble has been made to show Pete as a screw-up, he is able to piece together that Rose is his daughter and that all of the damage that is happening is his fault. This episode takes a normal, ordinary man on the worst day of his life and allows him to be a hero he never was. He gets to see the daughter that he won’t be alive to see grow up. The episode makes it his choice to go and fulfill his destiny to die being hit by that car. How many people could do that, honestly?

Pete realizing that he is dead by listening to Rose tell him about this great dad he knows he is never going to be is completely heartbreaking. It’s got to be difficult to listen to someone describe this amazing person they think you are to realize that it isn’t you and it never will be.

It’s kind of awesome that The Doctor comes up with an impossible plan to save the day at the last minute that gets fouled up by the human emotions and irrationality present in a difficult situation. We get so used to The Doctor pulling a solution out of his ass that saves everyone at the last minute that it’s kind of awesome that they actually kill Pete Tyler and he stays dead. Not only that, but he’s made the choice that he will die to save everyone and everything.

1x08-Father-s-Day-doctor-who-17495248-1600-900

Ordinary People

A large, recurring theme in this episode especially is the idea of ordinary people. Rose argues that saving her dad isn’t a big deal because he wasn’t an important person. The Doctor says that the most ordinary person is the most important person in the universe. He tells the bride and groom that they are important.

So much of this first season of Who was about celebrating the ordinary. Rose is a normal, working class girl with a mundane, ordinary life. We get so wrapped up in the idea that everyone has to be Harry Potter that we lose track of the importance of common people. Each and every single person is the center of their own universe. We are not a world made of NPCs. We all work and love and live and that makes each and every one of us important.

After Thoughts

  • First off, I wanted to say that the person who scored this episode did a fantastic job. When Rose saves her dad and other bad time paradox things hit, the score shifts into a dissonant glissando. The music changes abruptly to a way that is wrong, which perfectly fits with the theme of this episode. Also, when Rose and The Doctor are talking about The Doctor having to let his entire world and people die, there is no soundtrack. None. It is silent. It is just him, his words, and his pain. Sorry, geeking out about music.

  • Holy crap. I didn’t process/remember that the best man at the wedding who was trying to talk the groom out of not marrying the mother of his child and to just live in sin for ten years was the guy’s father. LOL!!!

It's the Revenge of the 80s! Why are there no Nikes and jean jackets??

It’s the Revenge of the 80s! Why are there no Nikes and jean jackets??

  • I have no idea if weddings in Britain are the way they are portrayed in Doctor Who and other British media, but I think they’re fantastic. You have all of these women dressed like they are going to the Kentucky Derby who are hanging out in the basement of the Rotary Club. All the men are wearing tails while driving around in rusty old cars. Having this wedding taking place in the 80’s and having the hybrid of the hats and the 80’s fashion is absolutely fantastic.

  • I love the moment when The Doctor yells at Jackie to shut up and do what he says and when she actually meekly does it, he’s like, “Wow, I should have done that a long time ago!” It’s nice to have a moment of earned levity in the middle of a dark episode.

  • Also nice little jab at how clingy Mickey is even as a child.

  • The Doctor to Baby Rose: Now Rose, you’re not going to bring about the end of the world, are you?

Seriously beautiful and amazing episode of Doctor Who. There is no grand mythology or puzzle to be solved. This is simply an episode about the power of love. Love can result in people doing the wrong things for the right reasons, or doing the right thing to save the people we love and cherish.

Next up we have the equally amazing two-part episode “The Empty Child” and the introduction of one of my personal favorite characters, Captain Jack Harkness.

Doctor Who: Series One- The Long Game

Eccleston and Piper take on the future.

Eccleston and Piper take on the future.

This is the last mediocre episode of the first series. Each episode after this is a classic or furthers the end game for this series. As such, this episode was kind of hard to get to because it wasn’t one of the ones I was super enthused about watching and reviewing for this blog series.

This one isn’t “bad” per se, it’s just not nearly as special as the stuff that comes after it.

Time to churn through this one and get to the good stuff!!

The Failed Companion

The point of the Companion in Doctor Who is to have an audience proxy. You’re supposed to be able to watch the show and imagine that you are the one traveling to distant times and spaces. They’re supposed to be relatable so that you can picture yourself as one.

Russell T. Davies trolled us a little with Adam. He established that not everyone is companion material. Some people are special and they get to be companions. People who are selfish Adam Eyeor thoughtless don’t get to keep their Golden Ticket, which is what happened with Adam.

Adam gets mentioned in an iO9 article about depressing Companion departures and for good reason. While his departure isn’t as depressing as Donna Noble’s, it still illustrates how one stupid decision can fuck you for the rest of your life.

I only saw this episode once and didn’t really grok why Adam was considered irredeemable. Going through it again, I am seeing small moments that foreshadow why he was kicked to the curb. We see the moment when he has the cell phone that can call the past that he knows he should give back to Rose, but you see him deliberate it and decide to keep it instead.

Things continue to get worse as the episode goes along. It’s rather disappointing to see someone give in to their base instincts. I realized as the episode went on that Adam is basically Biff from Back to the Future. If there was a sport’s record book available in Satellite Five we would live in an unfortunate reality. It’s too bad he can’t go back and invest in Apple when it was nineteen bucks a share.

Again, it’s really interesting to go back and see this episode and see all the stupid shit Adam does. I barely remembered this episode. Seeing the iO9 article I didn’t even remember Adam was a character. Going back and watching this I am puzzled why this didn’t leave a more visceral impact on me. The part where The Doctor is being given away because Adam opened up his mind to the High Intelligence to send a message to himself in the past to invent/invest in the right technology is really memorable and I honestly don’t know why it didn’t make a bigger impact.

Satellite Five

Wasting Simon Pegg is a sin against humanity.

Wasting Simon Pegg is a sin against humanity.

Yes, I am going to get crap from Chris Adamson, but this whole episode seems like a giant cautionary tale about Fox News and Rupert Murdoch. This is a prospective future where the human race lets itself be controlled by an infotainment industrial complex. There is a higher power using its influence to control the reality experienced by humanity to ensure that no one asks any questions about what is happening to society. People are allowing themselves to be blindly led and live in terror of amorphous threats with no solid or concrete parameters.

The plot device where people open their brains to the main computer is a decent allegory for our current social media experiment. People are voluntarily pumping their personal information out to people who capitalize on it and are using it to design ever more manipulative ways to contour our reality.

It’s kind of disappointing that they have Simon Pegg here and he isn’t using his real accent and he’s blond. All of his personality is kind of stripped. It makes me sad.

The Doctor and Rose

It’s fascinating to see how far Rose has come since the beginning of the series. This is only her seventh outing, but she is giving the grand tour to Adam like a pro. It’s kind of cute to see The Doctor watching her with a modicum of pride for her confidence in showing him the ropes. His little companion is growing up!! However, she hasn’t learned not to give away the TARDIS key yet. Bad Rose!

It’s interesting to see how proud The Doctor seems of Rose. In the first several episodes of this series he treated her as something of a pet. She was a curiosity. She was someone who was more remarkable than the people around her, but she was still an inferior human.

The bad CGI!!! It burns!!

The bad CGI!!! It burns!!

There are parts in the episode where The Doctor seems to delight in the growth that Rose has made over the course of the season. He chastises the woman who doesn’t think the heat is an issue by saying that Rose is asking all the right questions. It’s also fun to see Rose’s sort of smug, “Ha ha, I got praised by The Doctor!” look at this comment.

I find it personally fascinating to see how their relationship evolves over the course of this series. I don’t really feel that many other companions go through this process. The only other companion I can think of who really profoundly changes over the course of the series is Donna. This first series had to do a lot to introduce Doctor Who to a new generation of people while staying true to the old series. The decision to make The Doctor rather grizzled and militant and to have him slowly recover his lost whimsey was a really interesting and successful choice by RTD.

It speaks to the strength of their relationship that The Doctor didn’t kick Rose to the curb as well after this incident. She wanted to bring Adam with them. She gave him the key. She made a mistake. He could have decided he was done with her after this, but he needs her and he knows it. There wasn’t a moment when he even considers that course of action. It speaks to the strength of their relationship even this early in the season that it feels natural that he wouldn’t take it out on her. Also, that would have disrupted the season and that would have been an unwise choice.

One of the complaints that I have about the Moffatt era Doctors is how little they seem to grow and evolve. Yes, you can argue with me that this past series with Clara and Danny Pink was somehow different, but it really didn’t capture me in the same way this series did. I don’t know if it’s the chemistry between Eccleston and Piper or if he was just such a good actor that no one else has been able to approach what he did. I truly believe he shows the greatest range of realistic emotions of all the modern Doctors. Peter Capaldi never really captured the extreme goofiness and the extreme menace that Eccleston oscillated between throughout each episode of this series.

For now I am delighting in watching his relationship with Rose. When they break onto Floor 500, The Doctor comments that everyone seems to have dropped out besides Rose and himself. And he likes it that way. So does she.

Don't fuck with us.

Don’t fuck with us.

The Future is Fragile

One of the biggest aspects of most science fiction from the twentieth century is this pervading idea that humans will conquer the galaxy. Except we don’t mean militarily. We will colonize space and explore strange new worlds. If you look at Star Trek, humanity is at the epicenter of galactic civilization. In Doctor Who, thousands of races interbred and descended from humanity. In Doctor Who, humanity has a destiny that The Doctor spends so much time to shepherd to fruition.

One aspect of this episode that is interesting and terrifying is just how tenuous that future is. The future we view in this episode isn’t the future we expect from humanity, but one that is terrifyingly similar to the one we live in now. A future where all of humanity’s information about the world is manufactured and filtered through a mechanism to warp our basic potential.

One of the reasons I hate the current Star Trek movie reboot is that J. J. Abrams clearly didn’t understand what made Star Trek appealing to begin with. Star Trek came out at the height of the Cold War and it was created to give hope to humanity that one day we would overcome our differences and move forward into the future united rather than divided. I feel like this episode is kind of like what would have happened if at various critical points in our history our better natures didn’t prevail and we never progress past where we are now. It really drives home this idea that the future is fragile. We have the potential to do great things but it takes very little to derail our bright future.

However, it’s nice that in our evil media future that we no longer just have the male/female genders, we have male/female/multisex/undecided/robot. Tolerance is always a good lesson.

Conclusion

I am glad I went back and rewatched this episode. It didn’t leave a huge impact on me initially, but there is a lot of good stuff in here that I missed the first time through.

Now that we are through the slow part of the season, we get to go and visit one of the strongest episodes of New Who: Father’s Day. Stay tuned!

The Demonization of Food

I had two incidents happen in the last 24 hours that have affected me on a deep, profound level that I would really like to talk about.

Last night I went to a friend’s house. We are beta testing a board game. Each of us is is going through some extreme life changes and we’re all trying to find ways of actually interacting with other human beings.

When I walked into his house, the heavenly aroma of fresh brownies hung in the air. His wife, who is also a friend, offered me a warm brownie and a glass of cold milk.

I honestly can’t remember the last time I was offered a warm brownie. I have had warm brownies at home, but there is always this cloud of shame attached to them. They get made because someone is really in the mood for chocolate and they are furtively consumed alone.

Having another person offer me a brownie with no associated guilt or feeling of failure associated with it was an incredibly moving experience.

The second incident was on the dead, forgotten social networking platform App.net. I commented about trying to figure out how to cook. I am living on my own for the first time in my life and I never really learned how to cook. I wish I had a cooking tutorial book for people like me starting off with some simple stuff that you then build into more complex stuff like you do when you learn programming.

Most people were very encouraging and enthusiastic about this goal. Except one person, who said: “Like you eat out every day prior to this? Unhealthy.”

That sound you hear in the background is the land mine this guy just stepped on blowing him to smithereens.

You have no fucking clue how pissed off I am about this comment.

I do not know why people in the country feel like they have the right to judge other people about what they eat.

My ex-husband and my father were both on extreme diets, but their diets were in direct opposition to one another. My father followed a mostly vegetarian diet with a lot of beans, rice, and bread. My ex husband followed a low-carb Paleo-style diet. Trying to coordinate a meal between the two of them was like the most bloody Holy War imaginable. Both were incredibly passionate that their way of eating was the right one, that the other person was an irresponsible fool, and that the other one would drop dead of a heart attack at a young age due to extreme obesity.

I don’t want to live like that. I have been living like this for the last thirty-three god damned years and I am fucking tired of it.

I like potatoes. I like pie. I like cheeseburgers. I like beans.

When I was a kid one of the highlights of my year was when my mom would bring home a French Silk pie from Baker’s Square. I told myself as a child that when I was an adult I would keep one of those suckers in my refrigerator and eat it directly out of the pie plate and share it with no one. Last month after my husband moved out of the house I brought a pie home and ate it directly from the plate. It was one of the most glorious, liberating moments I have had in my life of being able to eat like a savage and absolutely giving no shits about it.

I am incredibly disturbed by the amount of judgement we have about what other people eat. I am angry that we are making overweight people feel bad for being moral failures for being fat.

My Life as a Fat Girl

I have been on both sides of the coin. I have been fat and I have been painfully thin. I am a recovering anorexic. I starved myself in high school because I hated myself and I wanted to disappear but I was too afraid to actually follow through with taking my own life. I have hated my body for being fat even though I was incredibly thin, to the point of being unhealthy and unable to retain any body heat.

I was placed on a bunch of creepy medications when I was 16 that made me gain over sixty pounds in less than two years. As I watched myself going from a skinny to a chubby to borderline obese teenaged girl, I cried from despair and self loathing. I hated all of my skinny classmates and I was pissed at myself for not realizing I was skinny when I was anorexic.

I didn’t have a boyfriend for ten years and my parents and my doctors thought I was a lesbian. I tried to talk to my doctors about what was happening, but I got a sanctimonious “Eat less and exercise more” rather than an honest disclosure that weight gain was a common side effect of the drugs they were forcing me on. Right now there is a class action lawsuit against one of the drug manufacturers for causing Type-2 diabetes in people who were on the same medication I was because it caused so much weight gain.

The second I went off of these medications I lost most of the weight. I didn’t exercise more or eat less. I just stopped taking medicine I didn’t need to begin with.

One of the worst parts about being fat was basically being invisible. I have always spent way more time with men than women and I developed crushes on a lot of my classmates. I didn’t really like any of them, I just kind of thought I was supposed to have a boyfriend and I was sad that no one was attracted to me.

I would sit next to my crushes and listen to them bitch about how the hot girls in their classes didn’t notice they existed while they were completely oblivious to the fact that I had a crush on them. I think if they had known I liked them it wouldn’t have made any difference. They would have been dismayed that the only girl who liked them was the socially awkward chubby girl with the bad personality. I don’t think they liked any of the girls they crushed on any more than I actually liked them, we all just wanted some external validation that we were okay.

When I lost all of the weight and went back down to my anorexic high school weight in 2008, I thought it would be this life changing experience. It wasn’t. I still felt bad about myself, except now I couldn’t go longer than two hours without having to take a nap, half of my hair fell out, and my face broke out and wouldn’t heal. What did make a difference to me was finally finding something I was good at and learning not to worry about the other stuff. When I started focusing inward on what I thought and felt rather than what I looked like I found peace.

We’re Not Being Effective

In spite of the billions of dollars we have sunk into research about weight, we seem no closer to understanding how weight works. Don’t give me any of that crap about “calories in, calories out.” Yes, on some level it is calories in, calories out, but there are a lot of factors that affect how the calories out gets determined. Women retain more fat than men do because we need to to grow and make babies.

Guess what? No one wants to be fat. No one chooses to be fat.

Being fat is one of the last acceptable things for people to be discriminatory about. You can’t say racist things in public anymore, but it’s perfectly okay to shame someone for being fat. People are being cut open and having perfectly good organs butchered by doctors to avoid being fat. We have created a narrative in our culture where anyone who is fat is fat because they lack the willpower to stop shoveling donuts into their gaping maws. We can feel superior to them because we have enough restraint to be thin even if we aren’t actively doing anything about it. This Calvinistic belief is preventing any meaningful research from being done into how to effectively fight the obesity epidemic.

This isn’t helped by the mass media messages that we receive telling both men and women that we are not “enough” to con us into buying gym memberships to “fix” ourselves to some Photoshopped ideal.

If you are a “stereotypical” fat person who spends all day eating, you are probably depressed or have some other issue that is the actual root of your issues. The weight is just a symptom. We aren’t treating weight like a symptom. We’re treating it like a moral failing making it more difficult for people who are struggling to actually get help. That really sucks.

I am sick and tired of everyone I know feeling shame about food. I am sick of everyone I know judging other people for what they choose to eat.

I want to see more people like my friend offering warm brownies to people with no underlying shame. I like to feed people. I used to bake a lot and it gave me a lot of pleasure giving people food I made and seeing them enjoy it. Something I used to love is now a source of tremendous angst for most of the people I know. I want everyone to feel loved and accepted for who they are rather than wasting their lives feeling ashamed because they keep gaining and losing the same twenty pounds over and over again.

When I got married back in 2009 I was skinny and sick and miserable. I have gained back more of the weight than I would really have liked to. I don’t really care. I feel better than I did then. I know now that I will never look the way I think I am supposed to. I am curvy. I hate skinny jeans. They are an abomination. I can’t force my body to fit into a mold it doesn’t fit into, so fuck it.

I am going to wear shorts that show my thigh fat. I find them comfortable and I would rather be comfortable than worry about showing people that I am chubby. My mom tells me not to wear things that make me look chubby. Hey! Guess what? I AM chubby. I don’t give a fuck. I feel okay in my own skin and I am fine with who I am. I am trying to go running more because I enjoy it and it makes me feel better. If I lose weight cool. If not, then whatever.

I am drawing a line in the sand here. I am going to eat whatever I feel like eating. I will eat my food mindfully. I will think about each thing I put in my body and if I want to eat pie, I am going to eat pie. Life is too short to feel hungry all the time and to eat unsatisfying salads and to feel empty inside.

If you have enough leisure time to make your food from scratch every day, great for you. I don’t. I am out of my house close to twelve hours a day. I spend that time bashing my head against a lot of really difficult stuff that drains all of my energy. I come home and find anything I shove into my mouth before taking a bottle of wine with me to the bathtub to try and drink myself to sleep, which usually doesn’t work and I wind up waking up at 4:30 in the morning.

I want to learn how to cook. I find it rather intimidating. I lived with a guy who spent thousands of dollars on various kitchen gadgets and wanted to work his way through the Julia Child cookbook. I just want to make meatloaf and curry. I want to have a few things that I can throw together when I am brain dead and I need to feed myself. Eventually I would like to make food for other people who will enjoy eating it rather than giving me a lame excuse about how they’re on a diet and they can’t eat my food because it has butter and sugar in it.

I had tutorials to learn how to program, I don’t know why they don’t have a similar thing for adults to learn how to cook. Start simple and build various skills that can be used together to make increasingly complex foods. I don’t want some asshole online implying that I am a slovenly person because I lived off of grilled cheese sandwiches and tomato soup after my ex moved out of the house because I was trying to keep my head above water.

I hope that this post inspires people who feel ashamed about food to go out and eat something they want to eat without feeling guilty about it. Don’t be ashamed. Don’t feel like you are immoral because you ate a brownie. Life is meant to be lived. Eat the brownie. Enjoy the brownie.

A friend of mine said something that I thought was great. He said, “I don’t know when I will die, but I do know that when I die I won’t die hungry. I will die knowing the last thing I ate was tasty and delicious.”

Words to live by.