Balancing Act

I spent this past week out in California. I spoke at Forward Swift, which was my first conference in San Francisco. This week was one of the first times I have ever actually spent time in San Francisco. I can see why so many tech companies require you to relocate to it.

I got pitched by my first venture capitalist, which was crazy to me coming from a rural town in the Midwest. I am going to spend some more time out there this weekend with a friend to try and make the most of the time that I am out here.

There is one thing that I just became aware of that I would like to talk about in this post. I was chatting with some friends about going to work for one of the big tech companies out here. I recently got one of my dogs registered as an emotional support animal and I was pondering if any of them would let me bring her to work with me.

ESAs do not have the same legal rights as full service animals. They can be taken on planes and kept in hotel rooms. Landlords cannot forbid ESAs from staying in apartments and condos, but beyond that they do not have any legal rights. I can’t bring an ESA into a restaurant or a workplace and have it be legally protected. A lot of places are willing to accommodate ESAs if you have proper certification and paperwork, but they’re not legally required to.

When I mentioned having an ESA and wanting to bring it to work, I heard many people say that they had never seen an ESA. In fact, most places they worked at didn’t have any service animals. At all.

This struct me as being kind of worrying. We, as a community, have been talking a lot about wanting to have better diversity. We primary talk about it in terms of having more women in the workplace, but there are lots of shades of diversity.

I am guilty of not seeing outside my own bubble. Earlier today on Twitter I made a generalized comment about how it’s socially okay for men to express anger and my good friend Basel reminded me that it’s only okay for white men to express anger. Black men are not socially allowed to be angry. So I totally get that if you are not personally disabled or do not spend a lot of time around people who are, then you would not really notice the lack of service animals and other accommodations for people with disabilities.

The only explanation that I can come up with is that these companies don’t hire people with disabilities.

It’s possible that people with disabilities don’t even bother applying for those companies. I know that is one thing preventing me from doing so.

In the interest of trying to raise awareness and trying to do advocacy, I would like to share some of the things that I do to try and cover up and cope with my personal limitations in regards to mental health issues.

I suffer from depression and PTSD. I was misdiagnosed with bipolar disorder when I was 16 because I was being stalked and harassed by a fellow student and it was easier to just say I was nuts and put me on medication than to tell him that his behavior was unacceptable.

I spent ten years being told that my version of reality was not accurate and that I couldn’t believe anything that I perceived. My freshman year of college another student handcuffed me to a bed and tried to rape me. A few years later a different one actually did and I now have PTSD as a result of that.

Ten years ago I finally figured out that I was not crazy. My perception of reality was not wrong. I decided to stop letting other people tell me what was real and what wasn’t and life has gone a lot better since then. However, there is still a lot of residual damage from that period of my life.

There was a period of time where I never thought I would be able to hold down a full time job. Being able to write books and travel to conferences and work the amount that I do is astonishing to me. But the only reason I am able to do that is because I have to follow a lot of strict rules based on trial and error about how I personally function.

I hate medication. I was on medication for ten years. It made me gain weight. It had terrible side effects. It would completely destroy my energy levels. It messed with my head. I had far less mental and physical energy to use to actually put towards doing cool things. Not being medicated means I can be a programmer. Being on medication means I can work at Target. I would rather be a programmer.

To cope with my emotional issues, I have pugs. Delia sleeps on me all day and she helps even out any emotional issues I have before they reach a point that they interfere with my ability to work.

A lot of places won’t let you bring dogs to work, which makes sense because you’re there to work and dogs can be a distraction. So I work from home.

I have an office I set up in my home. It is a room that I use only to work. I get up in the morning, I get dressed, I make tea, and I sit down to work. When I reach a point where I feel I can no longer work, usually around 5:00, I close my computer and leave that room and don’t come back until I am going to work again.

Sometimes I have bad days. I have days where I go to sit at my computer and I feel a veil of despair fall over me. Sometimes I feel the urge to harm myself. I know that when I feel those things I need to step away from the computer and take a really long break. Sometimes an hour break works, other times I have to take the whole day.

Because I have gotten better at maintaining my mental health, these days are usually few and far between. They’re basically sick days. I only have a few of them a year when I am able to do all of the things I need to do to maintain my mental health.

I find cooking helps my mental health. I get depressed if I sit in front of a screen for too long. I keep trying to find analog hobbies that keep my brain engaged without having to deal with reading or writing words. I find cooking soothing because I can chop veggies and sauté things with TV on in the background and rest my brain so it doesn’t hurt anymore. One reason I am interested in electronics is because I want to work with something that has no words.

When I worked for Brad Larson on robotics stuff, we had things that we did besides just programming. If I had a day where I simply could not deal with sitting at my computer, I could build a robot. I was doing something to actively contribute to the company when I had days I couldn’t code. It was fantastic to have different kinds of work that could be done so I could take a less mentally demanding task on days where I could not deal with it.

One thing that drives me absolutely crazy about a few jobs I have had is this idea that there is only one task, and that is coding. It isn’t even that things are divided up into easy and hard coding tasks. Everything is hard. If I have days where I can’t deal with code, I either have to tell my boss that I am taking the day off, or they tell me to just try my best and I have to sit in front of my computer and cry. These are the things that lead to more frequent bad days. They wear down my mental and emotional reserves until they are gone and they cause long term damage.

I took several months off this year because I got pushed too far and stripped my reserves and nearly quit programming altogether. I have been going to therapy once or twice a week for the last few months. That is another thing I can do since I work from home. My therapy appointments are on Monday afternoons. As long as work gets done, no one needs to know that I take half a day to go and get therapy so that I can be productive the rest of the week.

Most of the things I do to keep myself productive are things I could not do in most offices at most companies.

Everyone is asked to conform to certain acceptable modes of behavior. Some people can deal with that. Others can’t.

We have accepted burn out as an inevitable thing. I feel a lot of start up want to hire young people who have not burned out yet so they can run them into the ground. Those people leave this community and don’t come back. We’re preventing ourselves from having a deep bench of experienced people for the short term gain of having people write bad code eighty hours a week. Huzzah for technical debt!

By not talking about this and by trying to force everyone to fit into a round hole, we are burning out a lot of really talented, intelligent people who damage themselves trying to fit the mold.

I think it’s incredibly frustrating to talk to people who want to change the world but then they want to exclude anyone who is different. What is the point in changing the world when so many people are excluded from the opportunities we have here?

If we don’t accept people with different backgrounds and abilities and ways of seeing things then we will stagnate. I don’t think being told to either go on medication that affects my ability to think or, god forbid, pretending to be normal, is the best long term strategy for resolving these issues. I think acceptance of how people work best and compassion and understanding are the way forward. They’re not easy, and apparently not visible, but they are important and we can do better.

Why I Won’t Work Weekends

I have found in my time in the programming community that people are somewhat mixed on the idea of working weekends. I have worked at jobs where it was explicitly stated that it was expected for you to work on weekends. I talk to a lot of people who won’t do any programming whatsoever on weekends.

I am working on a contract right now where I get work emails from co-workers that are sent out on Sundays. I feel guilty because I know that they’re doing a lot more work than I am. I feel like I should be working constantly or at least appear to work constantly so that no one thinks I am lazy. That’s bullshit.

Right now I am working on a dream project. I get to do something I never thought I would get to do. I am incredibly grateful to get to do the work I am doing, but I know this isn’t what I want to do with the rest of my career.

All of the skills I currently have are for things I don’t want to do anymore. I don’t know if it’s burnout or if I just get bored and want to keep chasing the new and shiny.

I have a lot of interests. I am interested in electronics. I am interested in 3D graphics programming. I am interested in cryptography. I am interested in robotics. I am interested in audio programming and engineering. I am interested in artificial intelligence and machine learning. I am interested in game mechanics.

I never have enough time to work on any of these things. I am afraid if I ever did get a job doing any of these things that I would figure out I don’t like them either. It’s not like anyone is actually going to pay me to learn any of these things. It’s difficult to find anyone hiring who isn’t just looking for someone who can pull data off of a server and cram it into a table view.

I keep hearing from everyone that there is no point in learning Sprite Kit/Metal/Anything outside of UIKit because no one is going to pay for an interesting user interface or functionality that isn’t available on Android.

A long ass time ago before the iPhone came out there were a number of companies that had stable businesses making Mac-only software. I refuse to believe that there is no future in indie development using the large number of frameworks most people never touch. There is a conventional wisdom that a stable business can’t be built even though I don’t think I know of anyone who has tried.

I know a lot of people who have tried to build RSS readers and weather apps and Twitter clients, but I don’t know a lot of people who have written comprehensive HealthKit apps. I don’t know a lot of people who have tried doing hardware/software integrated products. Everyone feels it’s too great of a risk and they don’t even try. There is “easy” money to be made doing boring stuff, so we all just accept the status quo.

I am one to talk. I have not released an app on the App Store, so it’s all well and good for me to knock people for not doing something I am not willing to do either.

That’s why I won’t work on weekends.

I want to spend my weekends working on something that makes me happy.

Right now I have this laundry list of things I find interesting but I don’t have any kind of context for even explaining what they do. If I tell someone I am interested in artificial intelligence and they try to talk to me about it I feel like this.

I don’t know if I am just not capable of being happy. I don’t know if there is some magical piece of technology out there that will make my soul sing in the way I think it will. I could just be a walking sack of discontent. I could spend my life chasing after something that doesn’t exist. I should be content with just finding something I don’t suck at. But I’m not.

I need to keep looking for that thing that captures my imagination. I don’t get to do that if I work on weekends. So I am sorry, but I need my weekends to try and find something that makes me happy. I don’t care if it’s the next disruptive technology or just some stupid home automation garbage I do to amuse myself. I want to feel alive and there are long periods of time right now where I do not.

Keeping Score

“Why did you let him treat you that way?”

I get this question a lot when people ask me about various relationships I have had. People don’t understand why I would not put up more of a fight on things like where we go on vacations or what color the wedding invitations were or whether we spent the tax return on a new couch or put it in savings.

I was thinking about that this weekend. I am in the process of painting and organizing my house. There are areas of the house, especially in the kitchen, that I have no idea about. My ex-husband organized the kitchen and basically never let me in there, so there are cupboards I have never opened full of things I have never seen.

One thing I decided to do was get rid of his plates and mugs. He had a set of plates and mugs that preceded the marriage. He left them here when he moved out. While he was packing he told me that he decided to leave those here and take a set that we bought our first year of marriage and the set that we got for the wedding.

I refused to let him take the wedding set.

The wedding set is a set of Asian-style square plates. It was one of the only things I absolutely insisted must be on the wedding registry. He told me he hated them because they were purple and he didn’t want a bunch of girly things clogging up his kitchen.

A dear friend of my family bought us the only set we got. The entire time we were married those plates were shoved onto a high shelf and were only used when we had company.

I asked him if he wanted his plates. He asked which ones, because he would take the purple ones but not the ones he made us use for nearly six years. That was when I realized why I let him treat me that way.

Until recently, I have been at a loss as to explain it. Usually those decisions were meaningless to me and I would let the person who cared more make the decision.

I also made an erroneous assumption that if I gave in on something I didn’t really care about that the other person cared very deeply about that it would go both ways. I figured that things would be equitable and that if I gave in on something that he would give in on something too.

I found out too late that it doesn’t work that way.

Every time I gave in on something, it was either immediately forgotten or it sent the wrong idea that I would give in on everything if enough pressure and bullying was applied. When I would stand up for myself, I would be viciously argued with. Either it would be too difficult for me to continue arguing and I would give in, or it would be so draining that it would take me a long to time recover in order to have another argument like that again.

This lead people to think I could be controlled. Yell at me and make my life miserable enough and I would give up and forget about whatever it was I was asking for or arguing about. These people felt they could bully me and always win because I would stop fighting.

What they didn’t know was that I was keeping score.

I was keeping track of every single time they lied to me or forced me to do something I didn’t want to do and didn’t treat me like a human being.

My ex-husband ignored my requests for a divorce for over a year. I physically moved out of the house and filed for divorce and only came back when he promised to go to therapy with me. But like so many other things in our marriage, he thought that if he ignored this it would go away.

I remembered every early thing I gave into in our marriage. I kept track of every lie he told me and every favor that he forgot the moment it was over.

I kept track of every time he blamed me for the quality of his life. Every time he purposely yelled at me to force me to cry to make himself feel better. Every time he put someone else ahead of me and assumed I wouldn’t make a fuss about it because I would just take it because that is what I do.

I will never be this person again. I am working very hard to be more assertive and to take more of a stand on things because I don’t want to train another person into thinking that I am a doormat.

If you’re involved in some kind of relationship with someone that you constantly steamroll because they always eventually give in, keep in mind that this person is also keeping score. This person remembers every single act of aggression you have placed upon them. And they are waiting.

How Random is arc4random_uniform?

I remember when I was in college and iTunes became a thing. One of the aspects of iTunes that I liked was their feature where you could randomize a playlist.

After using it for a while, I noticed it didn’t seem to quite work. I would make a playlist with ten songs by one artist and two songs by another and every time I would randomize the playlist the two songs by one artist would always play one after another.

A lot of people complained about it. There were articles on the Internet about how random does not mean that the algorithm will always separate those two songs. If you shuffle a deck of cards there will periodically be sets of cards that settle into order. In later versions of iTunes there were options to make thing more or less random, which didn’t make a whole lot of sense to me.

To this day, I am still bothered by what seems to not be truly random modes of behavior. I play a few German-style board game apps on my iPhone and I notice that the dice rolls never seem to feel natural. In Settlers of Catan you roll two dice. Statistically, the dice should amount to seven as the most common dice combination, followed by six and eight. Whenever I play this game, I will have three or four rolls in a row where the dice total is three, which is statistically improbable. If this happened just once, it would be weird because stuff like that can happen in real life, but it happens every game.

I don't want him touching me!

I don’t want him touching me!

Random isn’t random. Humans are bad at making truly random patterns. In the pilot episode of Numb3rs, Charlie demonstrates this by having everyone create a “random” distribution of themselves in the room, which isn’t truly random because everyone is trying to maintain a certain distance from one another. (That scene is about 18 minutes into the episode, if you don’t want to watch the whole thing.) If it were a truly random distribution there would be clumps of people. Cornell has a page summarizing this if you’d rather read than watch.

Humans also mistake things that look random for not actually being random. Synchronicity is the practice of looking for patterns in randomness because it’s the believe that some things are so coincidental that they could not possibly be con incidents but the presence of a higher power. This is the basis for divination methods such as the Tarot and the iChing. There are books about this phenomenon.

So if humans are bad at creating random sequences and see meaning in random patterns, then computers should be awesome at it, right? Well…

RC4 and ARC4

There are a lot of reasons that a computer programmer would need randomly generated values. Most games depend on having a lot of randomly generated values. You can’t play Solitaire without a “shuffled” deck. Having enemies randomly spawn, rolling dice, and a lot of other things depend on random values to work.

Even more importantly, randomly generated values are vital for cryptography and security. It is this purpose that spawned our most used random generation algorithms.

Arc4Random is the most common command used to generate random numbers. A simple way to generate a random dice roll in Swift is:

let diceRoll = Int(arc4random_uniform(6) + 1)

So what is arc4Random and where did it come from?

In 1987 a man named Ron Rivest created the Rivest Cypher 4 (RC4) algorithm. He did this while working for RSA and thus they owned the algorithm.

RC4 is a stream cipher, allowing for varying lengths of bits to be encrypted. It remained secret and secure until 1994, when it was reverse engineered and the cypher was cracked. RC4 was a registered trademark owned by RSA, so this new, public algorithm was named ARC4.

Since this cypher has been cracked, it’s a really bad idea to use this to encrypt your programs. But it still works for creating randomly generated content, so it is now commonly used in things like game programing when you need randomly generated content.

How Computers “Generate” Randomness

There are two flavors of random number generation in computing: Pseudo-Random Number Generators (PRNG) and True Random Number Generators (TRNG).

RC4 is a PRNG, which means that arc4random is also a PRNG.

PRNGs work by generating a table of values from a seed. These values are supposed to mimic what you would get if you had true randomness. If you took an intern and had them roll a die a hundred times and record the result they got (for experience, of course) and made it into a table, you would have a PRNG.

So if you start out with the same seed, you’ll get the same results over and over again. In order to get different results, you need to use another seed.

For most of what you need to do with random number generation, this is good enough. If you just want to have a game on your iPhone where you need to randomly generate bad guys, this is just fine. It’s not fine if you’re trying to encrypt credit card or personal health information.

Random Number Playground

I wanted to test out how random arc4Random is because I feel like there are number that get repeated all the time constantly and it’s not really an even distribution.

I create a playground that you can access here. I am planning to add additional functionality to this over time, but it’s pretty bare bones at the moment.

I decided to run this die roll function twenty times. With six values, there should be about three rolls per number. Didn’t quite get that:

  • Number of 1: 7
  • Number of 2: 2
  • Number of 3: 1
  • Number of 4: 4
  • Number of 5: 2
  • Number of 6: 4

Yikes! This seems to buy into my Settlers of Catan theory that the game is set to screw me over by generating an excessive number of ones.

However, as anyone who does polling and clinical trials can tell you, twenty is not a large enough number to be statistically accurate.

So what happens if you run this a lot? Like a lot a lot? What if you ran this 2000 times? I got these results:

  • Number of 1: 348
  • Number of 2: 304
  • Number of 3: 327
  • Number of 4: 329
  • Number of 5: 347
  • Number of 6: 345

As you can see, if this gets run a lot, then the numbers even out significantly. The number of ones, fives, and sixes only deviates by three.

Conclusions

There is a difference between snapshots of things at certain points in time and long term patterns of behavior. If you look at something like the stock market, stock prices can deviate wildly over the course of an hour, but if you look at long term trends, then they tend to even out.

It’s rather frustrating to play a game expecting the dice rolls to behave statistically. However, if everything in life behaved exactly as you expected it to, it wouldn’t really be random, would it?

Additional Links

Beware of Publishers Bearing “Free” Gifts

I buy a lot of programming books. Like, a lot a lot. If you’re a publisher and producing any books on OpenGl, VR, robotics, etc… I am probably giving you money.

One place that I buy a lot of programming books is Packt Publishing. They were one of the first publishers to have books out on the Unreal 4 engine. They have a lot of graphics and game programming books and their prices are fairly reasonable.

Back in May they had a deal on a set of five books on game development. Two were books I was planning to buy anyway for the price of the other five, so I bought the set of books. I noticed at the end of my invoice that they gave me a 10-day free trial of their online library of books.

One of these things is not like the other...

One of these things is not like the other…

I am already a Safari Books Online subscriber and have access to the Packt library, so I just ignored this add on to my purchase.

(Yes, I do go out and buy books I am paying to have access to through Safari. I know I could save a lot of money by not buying a bunch of programming books I probably won’t read, especially when I am paying to have access to them. Don’t judge me.)

A week later I got an email from Packt telling me my trial was almost over and they hoped I was enjoying their books. I was kind of miffed. I never initialized the trial. I have gotten free trial offers for Safari that I have never been able to use because I wasn’t a new member, but they always had a code that you needed to use in order to start the trial. I didn’t know that the trial would start automatically.

I had somewhat forgotten about this until I got an email yesterday telling me that Packt had charged me $12.99. I went to check on what the charge was for and guess what? It was for a monthly subscription to their online library.

So, they signed me up for a service I didn’t want, gave it to me without my permission, and because I was unaware that they were doing this they started charging me for something I never authorized.

I was incredibly annoyed. I feel this is a really sleazy way to do business. I cancelled the subscription immediately and wrote an email to complain. Here is the response I got:
email

They basically tell me that if I don’t want their subscription I have to cancel it. I grok that. Already done it.

There is no acknowledgement that what they did was underhanded or sneaky. Their response basically treats me like I am an idiot who didn’t know what I was doing.

I know that most services like Amazon and Apple Music and whatever offer you a free trial period after which your credit card gets charged. They hope that you forget that you signed up for a free trial period and they can charge you because you forgot to cancel when the trial was over. That’s kind of sneaky, but it’s still something where you are choosing to opt in. You are saying “I want this and I agree to pay money for this if I forget to cancel my subscription.” I have avoided free trials of things for this very reason.

It is not okay to “sell” someone something they didn’t choose and then charge them for something they didn’t opt into.

There is a bit of shady behavior on this site. They recently released a $50 OpenGL book that is so out of date that it does not mention shaders, which have been around since 2004. People have complained and gotten a “We’re sorry, we’ll pass your criticism on to the author.” This book is still available and does nothing to warn the reader about how out of date it is. Good publishers like the Pragmatic Programmers remove out of date books all the time.

Their royalty structure also leaves much to be desired. The 16% royalty is not necessarily bad, but considering how many times a year they sell every book on their site for $5, I find it incomprehensible that anyone working on a book ever outearns their advance.

It’s really too bad. They have a lot of books on rather obscure and esoteric topics that most people don’t cover. They have one of the few books on the OpenGL Shading Language on the market. As far as I know they are the only publisher producing any books on LLVM. I would like to think there are better ways of producing a broad range of interesting content without screwing over both the authors and the customers.

CocoaLove and Indie DevStock

I speak at a lot of conferences. I have spoken at around ten conferences a year since 2014. That’s a lot of conferences. I have had some not so great experiences and a few really awesome ones, and the awesome ones are the ones I want to talk about in this blog post.

The best conferences I have attended over the last twelve months were RWDevCon and CocoaLove. Both of these conferences went above and beyond to deliver a unique conference experience.

CocoaLove is in Philadelphia and really embraces the City of Brotherly Love vibe. Curtis and his team make sure the food at the conference is local, including an entire lunch activity around getting authentic Philly cheesesteaks.

RWDevCon has the advantage of name recognition because of the years of amazing tutorials that Ray’s team has put out. CocoaLove does not.

Another great conference that might not make it to its third year is a newcomer, Indie DevStock. Indie DevStock is being run by my friend Tammy Coron, a fellow Ray Wenderlich tutorial team member. She talked to me about running the conference with her, but I told her I was too busy. I was mostly too cowardly to actually stick my neck out and try to run my own conference. Tammy has bigger balls than I do and is making a go of it.

Both CocoaLove and Indie DevStock are in regions of the country that don’t see a lot of conferences. CocoaLove is in the Northeast and Indie DevStock is in the South.

Every week on Twitter I see people bitch and moan about the lack of diversity in tech. Everyone wonders what we can do about it. CocoaLove made a concerted effort to have a diverse lineup. Indie DevStock is run by a woman and 67% of their lineup is underrepresented persons in tech.

Both Curtis and Tammy have lovingly put a great deal of work into making their conferences special and unique experiences. People don’t run conferences to make money. These are labors of love. It’s really easy at a certain point to just kind of go, fuck it, and deliver a generic conference experience. We’ve all had our fair share of those. Both Curtis and Tammy really got creative and tried to set their conferences apart from everyone else.

Every year I hear of some really cool and special conference that has its last year because it’s just too difficult for the organizer to run it anymore. NSConf. Second Conf. C4. NSScotland. Everyone bemoans the loss of these conferences.

There are a lot of these conferences that I have been greatly disappointed in missing out on. I’m sure other people are disappointed as well.

I want to suggest that if you live in any area East of the Mississippi you strongly consider attending either CocoaLove or Indie DevStock. I am attending both (and only speaking at one.) Nashville is a ten-hour drive from Madison and Philly is thirteen hours. Supposedly I will be able to bring my beloved pug Delia to Indie DevStock. It’s wonderful to have a few conferences that are within driving distance from me where I don’t have to buy a plane ticket and deal with all the shenanigans I have dealt with this year.

You can use the code “HELLO” to get a discount on a ticket to Indie DevStock.

I know the face of iOS development is changing. We’re growing and evolving and becoming more corporate. I do hope that even with all the growth of the iOS community we don’t forget our funky, eclectic roots. The unique conference experiences that we have are in danger and it’s important for us to support them.

Anyway, I suck at selling things. There’s a reason I became a programmer and not a sales person. I want to help spread the word about these conferences and try to convince people to come so that iOS development doesn’t become just like everything else. Support indie development and diverse voices in tech!!

I am the Hermit

So today I was really stupid and went on Facebook and whined a little bit about not finding anything fun. Since I gave up drinking I realized that the vast majority of my recreational activities revolved around getting to drink. My favorite restaurants had ten page drink menus with ten or fewer food items. I used to like camping because it was an excuse to drink all day and read in the tent. I was exhausted and trying to figure out what to do today before giving into the inevitable by staying in bed and sleeping until early afternoon.

A friend of mine invited me out for a Solstice event in Illinois at her church. This event is starting around now (quarter to eight on a Saturday night) and is two hours away from me. I assume it will go on for some time, at which point I would need to drive two hours home and get home at like 3:00 in the morning.

I have no idea how to tell this person that I can’t deal with doing this.

My current job is incredibly mentally demanding. I remember a time before I started programming where I could go out with people after work and do a lot of stuff, but I can’t anymore. By the time I get done with my work for the day, I have nothing left to give. Trying to explain to someone that it’s just too difficult for me to drive four hours on the spur of the moment on one of the only days of rest I have is too difficult.

I see so many people around me who seem to have more demanding schedules than I do who seem to do more than I do. People who have children and full time jobs and still have hobbies and groups they belong to. I have no idea how these people do this. I have groceries delivered to my house because it’s too difficult for me to drive twenty miles and deal with traffic and all of the zombies that litter the grocery store. It’s easier for me to just cook for myself than it is to leave the house to find food, which is one of the only reasons I don’t do take-out.

Every time I leave my house I have to carefully plan it out to make sure that I reserve enough energy that I don’t completely exhaust myself. I do this when I have conferences. I know well ahead of time that I have one coming up and I make sure to rest adequately before going and I have proper recovery time once I get home. I have no idea how I used to be able to commute to work. Just commuting from my bed to my desk is a stretch on some days.

Nothing I am saying on here is about people I meet at conferences. I love attending them and meeting people. It’s a relief to get to spend time with people that I feel on some level grok me that I can have meaningful interactions with. Sadly, most of them live too far away for me to have enough of them to justify leaving my house on a regular basis.

I have a lot of local friends who are annoyed with me because I don’t spend time with them. They invite me to do things that require me to drive between half and hour to two hours to get to wherever they are. If they’re in a city, that requires me to navigate a bunch of traffic and find some place to park my car, which can get expensive. Sometimes they want me to drive them places because they don’t own cars because why would anyone own a car in a city. I am exhausted before I even get there.

I was talking with someone about building an airplane. Their hanger is 45 minutes away from my house. I spent half of a day with him driving to several regional airports to visit a bunch of people doing this. It took me over a week to recover from this excursion. I have been avoiding his emails because I don’t know how to explain that spending half a day driving around completely drained me of all my energy and that I don’t think I can work on a plane with him because the drive there alone completely exhausts me.

Sometimes I cancel on people because I know that if I put out the energy to go and do things with them that I will have nothing left for a week or more. If my presence was appreciated and respected it would be easier to justify going, but most of the time it’s seen as expected. It feels like a bottomless pit of need. No matter how much effort I put into maintaining a relationship with someone, they always need more. Everyone else can do this, why can’t you?

It makes me feel shitty. I feel there is something wrong with me because I simply can’t do what everyone else seems able to do. I don’t know if it’s because of how difficult my job is that I have no energy. I don’t know if I am depressed or I have something that is preventing me from fully being able to rest. I don’t know if I have too many projects. I don’t know if I am burned out. I don’t know if it will ever get any better.

I had a severe period of exhaustion about ten years ago that slowly got better over the course of two years. I keep holding out hope that this gets better as well. I think it’s slightly gotten better, but I am still painfully exhausted most of the time.

I am also finding that I don’t enjoy doing the things I used to enjoy doing. I used to go camping and go to movies and do board game nights. I don’t enjoy these things anymore. I find them mentally and physically exhausting. I find that I have empty, meaningless conversations with people who are trying to find an escape from their lives. I used to be one of those people, except I did escape from my life.

I don’t know how people can go out several nights a week. I don’t know how they can go to the movies and to concerts and to Geeks who Drink pub quizzes. I don’t know how people can spend their weekends at festivals and still be able to get up and go to work. I don’t know what they could possibly have to talk about. Based on my previous experience, you don’t do this stuff to talk.

I worry about mentioning any of these thoughts because I don’t want people to think I am misanthropic. I worry that this is simply a prolonged period of depression and if I tell everyone to fuck off and leave me alone I will be regretting it in a few years when I feel better and I am atoning for being an asshole to everyone.

I just know that right now I am tired. I have no interest in doing anything I found fun for the last five to ten years. I just want to spend all day in my house with my pugs working on programming. When I get too exhausted to do programming I don’t want to further exhaust myself by leaving my house and hanging out with strangers doing things that are supposedly fun but I find boring. I am sick of trying to explain myself to my friends who do not seem to understand because they personally don’t experience what I experience. I am sick of being told that if I go on a one week vacation that it will magically refresh me and make me all better. I am sick of people trying to give me unhelpful advice rather than just saying “Sorry to hear you feel lousy.” I am afraid to break off relationships with them because I am afraid of being alone. I am afraid I will snap out of this one day and people will hate me for being priggish and sanctimonious, so I keep trying to make efforts that result in me being resentful and further exhausted.

My friend told me that I didn’t have to talk to anyone at this event. I could just keep to myself and commune with the Lord. Well, I can keep to myself and commune with the Lord just fine from my house. If they do this again and she tells me about it ahead of time, I can schedule it so that I don’t exhaust myself. For now, I am the hermit.

Streaming WWDC 2016

I have never had the privilege of attending WWDC. Most years (including this one) I never bothered to apply to the lottery because I couldn’t afford to go. The one year I could afford to go, I didn’t win a ticket and I decided I would rather have the money as a buffer than go out to WWDC. This was the correct decision.

I attend a lot of conferences. I speak at a lot of conferences. Unfortunately, I have had some difficulty actually attending sessions at conferences. I have panic attacks when I am trapped in a room full of people and I can’t get up and walk around. This was one reason I was never super disappointed about going to WWDC the last few years. The idea of being stuck in a room for a whole week makes me feel like curling in a ball and crying. I go to conferences to network and drink with my friends. Now I am at the point where it’s just networking since I gave up drinking.

One thing I had forgotten about was discovering new things by attending sessions I hadn’t thought to go to. When I went to my first CocoaConf, I encountered a lot of interesting things because I wanted to watch Jonathan Penn and Josh Smith present.

When Swift was introduced two years ago, most of the conference sessions revolved around talking about Swift. I like Swift, it’s a neat language, but I am sick of talking about it. I am tired of hearing people talk about side effects and protocols and immutable state. I miss the first few years I was an iOS developer when people talked about frameworks and weird little nooks and crannies of the Cocoa architecture.

Taken together, this has created something of a perfect storm where I got burned out on iOS development. I got sick of talking to people about it because it always boiled down to Swift and arguing about code purity and a bunch of other bullshit.

I saw the Keynote this year and I had absolutely no enthusiasm for anything this year. I was irritated and cranky and didn’t want to deal with anything. But I noticed that this year Apple decided to stream most of the sessions live. The sessions were always available online later and last year they started showing select sessions. I watched the Swift ones because it was for my job and was still new and exciting. But I rarely watch the sessions afterward because when I watch the sessions, I sit there and pause every few minutes to try and process the vast amount of information that is being presented. There is a massive backlog of lots of sessions I think would be nice to watch but I never get around to watching. I did not think I would do anything this year.

I was wrong.

Streaming the sessions live has completely changed my life this week.

I work from home and so I just kind of threw the live stream on while I worked on stuff. I have it on in the background. I can’t pause the live stream, so I am not poring over every second of each video minutely. I am getting an overview of what they are talking about so I can go and research things later. I also have a team of people on various Slack channels who are watching it with me that I can chat with about the things we find new and exciting.

There were five whole sessions on Metal this year. The last two years I only got through the first Metal video because I felt like I didn’t understand it well enough to move on to the next video. This year, since they were just on, I could passively leave it on and get through all the videos. If this was a normal year, I would not have encountered the thing that has excited me the most this year, which is doing neural networks in Metal. That was introduced in “What’s New in Metal Part 2,” which was the fourth Metal video streamed. I did not need all the context from the first three videos to get excited about the new stuff in Metal.

I got to watch all the videos about GameplayKit, Photos, SpriteKit, etc… All of these technologies that I have been interested in but in a passive way were all just there for me to listen in on. I got introduced to so many things I didn’t know about in obscure frameworks that don’t get a lot of love because most people need to pay the bills and so they don’t do sessions on SceneKit.

This is what it was like at the beginning when I started going to conferences. I would discover so many new things that I would go home excited to get working on something. I haven’t felt this way for the last two years.

I worked for Brad Larson for a year. He told me that the reason he got into making Molecules and got into OpenGL and doing GPUImage was because he had a free period at WWDC and just decided, on a whim, to watch a session on OpenGL. It’s crazy to me about how things you do on a whim or by chance can completely change your life. By not being exposed to these sessions over the last few years, I have been cutting myself off from these chance encounters to find something truly special that I can learn and make my own.

It has been a great gift to get to participate with WWDC from home. Being able to get up and walk around during a session and cuddle with Delia while listening to people give their talks has helped me tremendously. I can talk to people on Slack from all over the world about the sessions as they happen so we can all be excited together. I know that people get something out of being there and getting to talk to the engineers, but for someone with mental health issues that prevent them from being able to be comfortable with massively large amounts of people, this has been a godsend.

I am planning in the future to go back and watch all the videos from previous years that I never watched because they took too long. I can have them on in the background while I work on other things. I can pick out the parts that interest me and look into them further.

For the first time in a really long time, I am excited about iOS development. Thank you Apple for giving that back to me.

The Value of a Liberal Arts Education

Ten years ago around now, back in 2006, I was beginning to realize I had made a terrible mistake.

I graduated from the University of Wisconsin-Whitewater with a Bachelor’s degree in Journalism with a minor in English composition. I declared this major two years earlier. I attended my first journalism class and the teacher told us to look to our left, then look to our right. He told us that ten years after leaving college only one out of fifty journalism majors were still working in journalism and everyone else had moved on to something else.

I looked around me with a smug expression thinking “Man I feel sorry for the other forty-nine people here who are wasting their time!” Clearly I was not the brightest college student as I should have heard this statement and thought “Run for your life!!”

Here we are, ten years later, and I am one of the forty-nine. I don’t even really know why I chose a journalism major. I knew I wanted to write and I knew I didn’t want to be a high school teacher, so that kind of left journalism and getting a PhD in English and praying that by some miracle I found a tenure position or wrote a best seller. I think the best seller would probably have been the easier goal to achieve.

I kind of wanted to learn a trade, but universities don’t do that. Trades were for people who were too dumb to get into “real” college. I had a Photoshop class with a dude who was forced to retire from his paper because he was so old. He had been a film photographer for forty years so they figured he would be the guy to teach Photoshop. Another student introduced him to the Layers property. There was no hands-on anything. There were plenty of hipsters in skinny jeans gushing about Ayn Rand, however.

I got really good at writing research papers and getting on the bad side of professors who did not like being reminded that they were wasting their lives teaching MacBeth to a bunch of brain dead just barely adults who wanted to drink and didn’t really know what else they were doing with their lives.

Besides the not drinking part, I was also one of those brain dead kids who didn’t know what I was doing with my life. I knew when I was in grade school I was supposed to be learning how to make straight A’s so that when I went to high school I would have a good GPA. I was supposed to do well on the ACT so that I could get into UW-Madison and get an engineering degree, even though I didn’t know what engineers actually did. When that did not pan out, I was supposed to attend another UW system school and get a degree in something, because if I got a degree in something, then there would be a job waiting for me at the end of college.

After I was informed that I had in fact completed all of my course requirements I dutifully went down to the job placement office and asked them what I do now. They said “How are we supposed to know?”

“Um, this is the job placement office. What do you do here?”

“We tell you to put your resume on Monster and connect with the people who you did an internship for, if you did one.”

“I didn’t do an internship. Don’t you have, like, companies that reach out to you to help you place recent graduates with them??”

“Why would you think that?”

I found out later that this stuff existed, but the people I talked to had zero interest in helping me out. I was easily deterred because I didn’t know any better. I also realized I was very screwed.

I didn’t have a demo reel to show prospective employers. I hadn’t done an internship. I wanted to work for NPR, but NPR’s Madison hub was at UW-Madison and they would only hire interns from UW-Madison and if there were jobs after that they would only hire people who had already worked there.

I realized that not only was I missing a lot of requisite skills, I also was missing a network of people to call on to help me find a job.

I had been raised by my dad to believe that personal connections were completely meaningless. If someone was looking to hire, they would put out an ad in the classifieds. They would impartially look at the resumes of everyone that applied and if you had a better GPA than someone else, you would be picked.

This is complete and total bullshit.

I spent a decent chunk of time being incredibly angry that I did not get picked over less qualified people simply because the company already knew this person because they were referred or had interned there. I realized very quickly that if I wanted to get jobs I had to be that person that people knew rather than getting angry about how “unfair” things were.

I also realized these placed wanted people who actually knew how to do technical stuff that I didn’t know how to do. I hadn’t learned any of this stuff in college and I didn’t know how to learn it, so I held my nose and enrolled at a for-profit technical college specializing in audio and video technology.

I spent two years there getting to touch real sound boards and real cameras. A lot of our classes were working through the Adobe Classroom in a Book for things like Illustrator and After Effects. This is technically something I could have done from home, but I would have had to convince someone to buy copies of these programs for me and I would have had to have had the discipline to just sit my ass down and work through the book without the threat of a failing grade hanging over my head.

This place also exposed me to something I couldn’t get at my first college: Connections.

My mentor at this school was the guy that got Slipknot signed to a record label and engineered their first album. Another guy was a guitarist on a Nine Inch Nails album. Yet another worked with Michael Jackson.

This was the school where I also learned how to learn on my own. Halfway through my time there, there was a massive upgrade to both the Adobe suite and Apple’s Final Cut Pro suite. I didn’t know how to work with the new software and so I asked a teacher for help. He sat down and worked with me and showed me where everything moved.

I looked at him and asked, “How do you know this? Who taught this to you?”

He looked at me kind of confused and said, “Well, nobody. I got a copy of this a few days before class started and I taught it to myself because I had to know it to teach you.”

That was the first time it ever occurred to me that one day I was going to be on my own. That technology changes and you can’t just keep throwing out money every year to keep taking classes to learn all the changes. When you’re a professional, you’re responsible for knowing your own stuff.

After that I quit asking as many questions. I tried to find out the answer for myself before I would ask for help. Slowly over time I stopped needing to ask for help altogether because I could find any answer I needed.

I worked really hard to try and connect with these people, but I ran into a wall that would prove insurmountable: I was a woman.

As much as people bitch about how sexist the programming community is, it’s nothing compared to the music industry. There were companies expressly telling the school not to send them female candidates because they would not hire women. The guys in my class kind of treated me like a talking dog and would never take me seriously. They would all hang out at strip clubs after school and it was very clear that I was never going to be welcome into their ranks.

Well, actually, it’s possible I might have, but I think I would have been raped and drugged and generally abused for a job that pays ten bucks an hour. No thanks.

After doubling down on this bad bet, I had to find yet another thing to do, which was how I got into programming. I learned my lessons from these previous experiences in that it was really stupid to try and break into “prestige” jobs where there are fifty qualified people for every job out there. Even in something like programming, where there is supposedly a lot of demand, you have to know people and they have to know you. You can either do that by dropping close to six figures getting a computer science degree from UW-Madison or you can work your ass off networking with people and making public contributions on places like GitHub (or this blog).

Even though I never got paid a dime as a journalist, the training I received for that has proven invaluable. I learned how to distill down a lot of information into its most important parts. I learned how to ask good questions and figure out what the root of an issue was. I learned how to write very clearly, effectively, and concisely. My experience doing radio helped me tackle conference speaking, which gave me the kind of visibility I needed to break into programming.

I learned to hustle and work my ass off. I did not want to be in a position like I was ten years ago when I assumed the world owed me something just because someone gave me shitty life advice.

Life doesn’t owe you anything. People will pay you if you can do something for them that is more valuable than what they are paying you. People are more likely to pick whoever is the first candidate that is good enough and if you’re one of the first people they consider you’re more likely for that person to be you.

In spite of all the pearl clutching about how writing as a skill is going in the crapper, there is a lot of opportunity out there for people who can write effectively, especially in highly technical fields. I think it’s easier to learn the tech after the writing because if you learn the tech first, you’ll find someone to pay you enough money to not bother with learning the writing. That is never the case the other way around.

Even though things were pretty bleak ten years ago, failing spectacularly was a wonderful learning experience. I am happy I failed early so that I could have enough time to process that experience and pivot to something else before it was too late. I see people who never struggled with anything suddenly hit road bumps in their thirties and have no fucking clue what they’re supposed to do. I am proud of the person I have become and the life I have built for myself.

That is the value of a liberal arts education.

Non-Alcoholic Experiments: Iced Tea

I recently wrote a blog post about giving up alcohol. I had an incredibly frustrating conversation with another developer on Twitter:

I love the smell of bullshit in the morning.

I love the smell of bullshit in the morning.

There is a great deal here that is wrong with our conversation here. This person clearly didn’t read my blog post because I mentioned not being able to drink without becoming violently ill. The issue also isn’t about telling people how to drink in moderation, it’s about the fact that alcohol is incredibly pervasive in the programming community. Would love to see this person telling an ethical vegetarian to just eat meat in moderation or avoid places that refuse to accommodate them and see how well that goes.

I have had multiple official conference events and activities that take place at breweries. It isn’t just deciding you’re not going to go hang out at the hotel bar. There are mixers and parties that are officially parts of the conference. I have worked in places where there is an office liquor cabinet.

At conference parties there will be a clear sign explaining all the wine and beer selections and nothing mentioning anything non-alcoholic. Sometimes you get lucky and they will have Coke, but lots of times there is just water.

Later this developer basically told me that you can’t please everyone. I am not talking about “pleasing everyone.” The fact that it’s assumed that everyone drinks and things are geared around that is quite troubling. There are people who have religious objections, health issues, or are, god forbid, pregnant, that don’t allow them to drink and casually talking about it like it’s a choice, like deciding you won’t eat mushrooms, is incredibly insulting. Also suggesting that if you don’t drink that you should just avoid conferences altogether is yet another example of how we as a community are phasing people out and excluding them. Yay diversity.

Twitter2

Another specious argument was that all non-alcoholic options are more unhealthy than “good” alcoholic options. In spite this person’s claim to the contrary, scotch is not healthy. I agree that juice and soda are full of sugar and no one would claim that they are health food, but neither is scotch. What do you think alcohol is? It’s sugar! Making a claim that having a soda or a glass of cranberry juice at a conference is a less healthy choice than having scotch is bullshit. They’re both unhealthy, but I can drink the juice and I can’t drink the scotch. A glass of juice is not metabolized through my liver. I can drive after drinking a glass of juice. I can take an ibuprofen the next day without jeopardizing my liver. Also, no one is healthy 24/7. We occasionally indulge in something and it would be great to be able to work with people to have less damaging indulgences rather than just saying to go drink water. Telling me what I can and can’t have because you have personally deemed it to be unhealthy is arrogant and presumptuous.

We are programmers. We brag about how great we are at solving problems. We talk big about being disruptive and trying to change the world. I call bullshit on this community that we somehow are helpless in the face of trying to figure out ways to be inclusive to people who do not drink alcohol. There are a lot of ways this problem can be dealt with and just shrugging and saying you can’t please everyone, stay home is not the right response.

Trying to Figure out Replacements

One of the big things that I miss about drinking is not the actual drinking part, but the stuff around it. I miss picking out wine and different flavors of vodka and mixing drinks. I miss using my cocktail glasses. I miss having a process of making things.

IMG_4523This last part has somewhat been replaced by learning how to cook, but I still miss being able to make stuff for myself.

A number of people suggested I replace my wine with tea. I was resistant to this switch because I already have tea keyed in my brain to work. When I get up in the morning, I go through a ritual where I brew my tea in my cast iron tea pot and pick out my mug and sit down to start work for the day. I don’t want to drink more tea at night when I have been drinking tea all day because it will not let my brain relax and realize that work is over.

I did, however, forget about iced tea. My dad was from Tennessee and the only tea he ever drank was iced tea. He did unsweetened Lipton iced tea, but I have realized this is a possible solution to some of the issues I have had with finding a replacement for alcohol:

  • There are a lot of different teas on the market
  • I can mix and match teas to make different flavor combinations
  • I can add in different flavorings like lemon juice
  • I can use a special glass

IMG_4522In order to avoid polluting my mind by confusing it about the teapot, I use a different cast iron teapot for iced tea. When I used to work out of the house I bought a second tea pot for work and kept one at home. I stopped using the work teapot because it’s capacity was a little too large and the tea would go cold before I could drink all of it. It brews about four cups of tea.

A while ago I invested in a tea water machine. One of my bosses had one at a previous job and it was always great to be able to just get up and brew tea any time I feel like it. My house’s electric system is wired badly and I can’t heat water for tea if I am using the toaster oven or running the dishwasher. This heater resolves that issue and has resulted in me drinking more tea because it removes a step and makes it easier to do it.

Since I am watering down the tea with ice, I want it to be strong. I have been using three tablespoons of tea. I want to have my tea be fruity, but I also want it to have some of the health benefits of tea. I brew this for at least seven minutes to try and extract as much flavor from the tea as possible before throwing it out. I usually reuse tea that I drink hot, but when I am making iced tea or chai I use the tea once because the second brewing is too weak.

I know it’s terrible, but I have a number of herbal teas from Teavana. They are very strong and if you blend them with a green tea, they add a lot of flavor. I have been using one part herbal tea to two parts green tea. This gives a distinct fruit flavor while retaining the health benefits of the green tea.

I want this to be something of an indulgence without being too unhealthy. I added an ounce of lemon juice and a quarter of a cup of sugar. I check and that is about 190 calories of sugar, which is about fifty calories per cup of iced tea, which gets watered down significantly. For comparison, an ounce of scotch is 64 calories and a glass of red wine is 125 calories.

Trying to do Better

I consider this experiment a success, but I know this doesn’t translate as a solution to the larger problem of having better non-alcoholic options in the programming community.

Cheers!

Cheers!

One of the reasons I am trying to do these experiments is to eventually figure out bette solutions that can be implemented within the confines of the system. I know that if I go to a bar with people I can order non-alcoholic beverages, but I would like to figure out a solution for catered events where there is generally wine and beer but not any other creative non-alcoholic options.

Most people don’t do something unless it’s easy. Right now it’s easy to drink alcohol because it’s the default. It easier to just drink wine and beer because they’re the most prominent options and everyone else is doing it. I think if it were easier to make non-alcoholic choices more people would do them and it would make more people feel welcome at these events.