Inktober

Inktober 2021

Last year when I got burned out on programming, I took five months off to try to learn how to draw. I had learned twice before, but for various reasons I associated those times with painful stuff, so I had a mental block on trying to go back and learn.

Two months after I decided to take the rest of the year off, I found out about Inktober. It is a drawing challenge that was created in 2009 that artists participate in where they try to practice their pen and ink drawing skills by doing a piece every day during the month of October. There is a prompt list and people post their drawings to social media.

I wasn’t going to post things to social media, but it looked like fun. I picked up some supplies and was getting geared up to participate in 2020. Then bad stuff happened, because of course.

First, the creator of Inktober was accused of plagiarizing a book written by a black artist on how to do pen and ink drawings. The Inktober guy’s book was pulled from production and no one has seen it, so not 100% sure it was, but it looked pretty damning based on available evidence. So that dampened everyone’s enthusiasm for the event because no one wanted to support a white dude stealing intellectual property from a black artist.

Second thing that happened was that my husband and I had a miscommunication and he asked me to paint parts of the house before winter. Winter is difficult and our house had the HGTV aesthetic of lots of tasteful neutrals, which fuck that. So a week into the challenge I had to go to the paint store and put tape everywhere and try to paint. I had a meltdown and only did about a third of the painting before I couldn’t deal anymore. So I never got back to things after this, which was a bummer for me.

Inktober drawing from last year.

So I have been looking forward to doing this for the past year. I have spent the past few months trying to figure out my supplies and what I want to draw.

First I had to figure out a sketch book. I knew from last year that it was really difficult to find the right kind of paper to use with a dip pen. Technically, ink is a fluid medium, so you need some kind of paper designed for wet media, such as mixed media or watercolor paper. I used mixed medial paper last year and had a terrible time because the rough texture of the paper meant that fibers kept clogging the nib of the dip pen.

Ideally I wanted either a hot pressed watercolor paper (which is smooth) or a Bristol board, which is what comic artists use for their finished pieces. Finding either of these as a sketch book was incredibly challenging.

My collection of potential Inktober sketchbooks. Yes, my studio is a mess. I didn’t have time to clean.

Artists tend to dislike hot pressed water color paper because the watercolor paint spreads quite a lot and it doesn’t have the distinctive watercolor feel to it. With the Bristol board, people tend to take sheets of it to render a page of comic sketches rather than have a whole sketchbook of the stuff.

I had resigned myself to just using a watercolor sketchbook and hoping for the best when I found my perfect solution. Viviva, a company in India that makes sheets of watercolor paint, was this year’s sponsor for Inktober and offered a bundle of supplies for the event. One of those supplies was an actual hot press watercolor paper sketchbook! The company founder did a video about the products and said they specifically created this product because over the years, other inkers have had the same complaints I have and there was now an actual market for such a thing. Score!

Hot press watercolor paper sketchbook!!

Next, I will go over pens.

Okay, I will be honest about something. One of the reasons I got interested in drawing is that I love pens. I love art supplies in general, but I have always loved pens. I was the weird kid in high school with a $50 fountain pen with converters and ink bottles. I am just old enough that we didn’t have computers in high school for note taking and when that became a thing when I was in college I found the lack of being able to physically write and sketch out my thoughts to be quite wrenching.

These are just the Japanese brush pens and dip pen nibs I have collected from various art boxes. There is so much more than this…

I am on the autism spectrum and I have sensory issues and sensitivities. I love the feel of a pen moving across the surface of paper and doing this soothes me when I am overwhelmed. I usually bring cross stitch with me to conferences for this purpose but I would really like to be able to draw as it would be less obtrusive and easier to transport.

So choosing the right delivery medium for my ink was very important to me. Last year I got rather confused because I didn’t know how to fill in large dark areas with just hatching. I didn’t realize people would use Sharpies or brushes to fill in those areas and use hatching for the shaded parts. I primarily used Micron fine liner pens last year. That was okay, but I think I have a better solution for this year.

I will go over these in no particular order.

All of the pens that have Japanese characters on them are some form of brush pen. Some have actual bristles while others have a flexible nib that allows you to get different line weights and variations. I’m trying to learn Japanese through DuoLingo and their alphabet has a lot more line variation than ours does, so their pens tend to be a lot more expressive. Also, the Japanese are very stringent about penmanship and craftsmanship, so if you’re looking for something that you want to be well made and delightful to use, you usually can’t go wrong with something made in Japan.

I also have several dip pens. I went out and bought the actual nibs that manga artists use for their work. There are three sizes that all have different characteristics. The more common one to find is the G nib, which tends to be used for more bold and dynamic manga. I also have a maru nib on the brown nib holder because it was tiny and got stuck on the holder and if I want to remove it I will wind up destroying it with pliers, so it stays until I break it.

Finally, I have a Winsor and Newton Kolinsky Series 7 brush. I kept reading online that artists use it for inking, but I am afraid to actually use it because I know that the ink will stain it, which I know is illogical because that is literally the only reason I bought it! I might use one of my less expensive and crappier brushes until I get the courage to break out the W&N brush.

Last, but not least, we have the ink in Inktober.

Last year I wasn’t really sure what I was doing, so I bought a bunch of brightly colored inks in various forms. I thought it would be like when I was in high school and I could use pink ink in my fountain pen for writing, but that is really not the case. Most of the colored inks I bought are for painting or doing ink washes on my finished drawings.

So this year trying to keep it simple and use some waterproof black inks.

From left to right: Kuretake Sumi ink, Speedball Super Black, and Sennilier India ink.

I got a Sennelier black India ink in this month’s SketchBox. I am excited to try that. Last year I got carried away and realized you could buy India ink by the pint and I got a pint of Speedball Super Black ink for $13. I also have over the years accumulated a collection of various Sumi black inks that are used in manga. I haven’t used them yet, so I would like to try a few things to see what I like using best.

Since there has been quite a bit of ugliness around the official Inktober stuff, I am not planning to follow the prompts. Instead, I am planning to draw various scenes from the TV show Twin Peaks. Since David Lynch comes from a fine art background, his films and shows tend to be more like surreal art pieces than story driven shows. There are a lot of iconic shots from the show and I think it would be good practice to try and render those.

I am really excited to have a full month to play around with these supplies. I am fascinated by comic art but it is also something that is somewhat unapproachable because I don’t know how one goes about actually producing it. I am excited to give this a shot. I might also be way too influences by Monthly Girls Nozaki-Kun…

Fixing the SFML Template in Xcode 12-ish

When I was trying to learn Unreal, I wanted to learn more C++ so I would feel comfortable working with the scripting. The book I was working through used the SFML library for building games. I was going to try to set this up in Visual Studio Code, but the SFML website recommends using Xcode. They even have a template and a tutorial about how to install it on the Mac.

I had some concerns about the template as the website says it will work in versions of Xcode above 4 and we just got version 13 a few days ago. (I didn’t update yet and had to look it up quick.) I thought it might need some work, so I tried to build the project directly after creating it and got a bunch of linker errors and other shenanigans.

I went to my husband (who has way more experience in this area than I do) and he spent like ten minutes fixing all the stuff that was wrong. (Side note: I am unsure if I would have figured this out on my own. I don’t know a lot of people who would have because most of the programming community has experience with high level abstractions that are maintained by people like my husband. Low level experience is hard to find!!)

I don’t think there is a massive glut of people who are chomping at the bit to do SFML or C++ development on the Mac, but if anyone is curious, here is a list of the changes I had to make to get the template to build in Xcode 12.ish.

Move the info.plist and Create a Resources Directory

Once you create a project using the SFML App template (which creates and entire application bundle and not just a binary), the first thing you will notice is that there are a bunch of disconnected resources in the resource navigator:

Screen shot of the file navigator with disconnected resources.
File Navigator with disconnected resources

This is one of the more simple problems to solve.

  • Move the info.plist from the Supporting Files group and place it directly into your main directory.
  • Delete the Supporting Files Group
  • Right click on the project in the resource navigator and choose “Show in Finder” to reveal the directory in your file system.
File directory with the incorrect configuration
File directory with the incorrect configuration
  • Create a “Resources” folder inside the directory
  • Move the four disconnected resources into this directory
File Directory with the correct configuration
File Directory with the correct configuration
  1. Go back to Xcode and use the file inspector to change the resource path for each asset.
Incorrect file path
Incorrect file path
Correct file path
Correct file path
  1. Restart Xcode. It won’t really “take” the resource path change until Xcode reboots.
Final version of the project navigator
Final version of the project navigator

To be fair, the only really “necessary” part of this process was to move the info.plist. If you deleted all the code in the main.cpp function, you would not need these assets and could simply delete them. But I like to get the project to a known good state and just wanted it to build as expected.

So this was the easiest fix. Next up is digging around in the build phases.

Build Phases

This section has to do with a discrepancy in how you are told to install the framework versus how the template assumes you have installed the framework.

First, navigate to the build phases in your template application and expose the Run Script:

Build phase run script that is incorrect
Build phase run script that is incorrect

SCREEN SHOT OF THE BUILD PHASES

The script is set up to look for your SFML header files and libraries in the file path “/Users/SFML/Desktop/packaging/tmp/install/Library/Frameworks”. But if you follow the directions used by the SFML documentation, the file path for your frameworks should be “/Library/Frameworks”.

My preference is to keep all my frameworks where they are supposed to be instead of creating a temporary folder on my desktop, so I change the first three settings to reflect the actual file path.

# SETTINGS SFML_DEPENDENCIES_INSTALL_PREFIX="/Library/Frameworks" CMAKE_INSTALL_FRAMEWORK_PREFIX="/Library/Frameworks"

CMAKE_INSTALL_LIB_PREFIX="/Library/Frameworks/lib" FRAMEWORKS_FULL_PATH="$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/"

Corrected run script
Corrected run script

”Provisioning” and Code Signing

Alright, I am aware that Apple has been pushing people to build universal apps that work on both the Mac and the iPhone. I have been fairly open about the fact that I have not been keeping up with everything going on the past few years, so I don’t know if things are different for provisioning. When I was still an Apple developer, I only did provisioning for iOS as that was the only job I had for most of my career.

My understanding is that the rules have relaxed somewhat when it comes to having profiles for just building to your own devices. At some point I will document getting an actual provisioning profile for the Mac when I have something I want to ship, but you have to have something in place in order to build on your machine and this is my shortcut.

  1. Go to your Targets->Build Settings-> All -> Levels -> Code Signing Identity.
How to find the code signing identity
  1. Select “Other” from the drop down menu.
I am fairly certain we tried the “Sign to Run Locally” option and it didn’t work and we didn’t debug it. I don’t think we were that stupid to not try it. /Snark
  1. Delete everything in the script
Empty code signing probably won’t get you through the App Store approval process, but at this point what will?

This is absolutely not a best practices thing. This is a total hack. This is my “I want to practice writing C++ code on my Mac and I want to see if it builds or not” hack. I will eventually have to figure out code signing and other bullshit if I want to ship anything I write here, but for my own narrow purposes, building is sufficient. If you already have this set up properly or I am doing something completely idiotic, feel free to ignore this or mock me.

Keyboard Input in Catalina

At this point your template project should build. Mazel Tov. However, if you want to run it you have one last bit you need to do.

In Mac OS Catalina, there were some changes to the permissions for allowing other applications to receive input from the keyboard while other applications were running.

The first time you run an SFML app, you will be prompted to give the application permission to use the keyboard while it is running concurrently with other applications. When I did this, I was dumb and made my game take up my entire screen, so I didn’t see the prompt. So even though I was clever and added keyboard monitoring to quit the program if I tapped “Escape,” I didn’t get the prompt to enable it, so the application had to be forced quit. D’oh!

So make sure to either enable this in the Security & Privacy settings or make sure your game is smaller than your screen so you get the prompt to do so without digging around in the settings.

I blocked out my “secret” project I am probably going to write about next week.

Conclusion

I am aware that I should probably put in a pull request to implement these changes on the actual template that is accessed by developers, but I don’t really understand the process of updating a template. I grok some amount of how to update a code base, but this is slightly outside my area of expertise. The Husband has some experience with maintaining open source projects, so some day when we both have a spare spoon he is going to help me put in the pull request. So it will probably happen after The Singularity.

The Engines of Creation

One of the biggest roadblocks I have encounter while trying to learn game development is dealing with an engine. My background is in iOS development and Xcode is sort of a happy medium between an IDE and an engine.

I didn’t quite understand a lot of how all the pieces worked together and talking to people whose only context about development was from games didn’t help much because people just didn’t have a mental picture of doing things any differently.

So, after several years of exploring various engines, my decision at this point is that I don’t want to use any of them.

Here are my reasons for not wanting to use the ones I am most familiar with:

  • Unity: Oh god, where to begin. I started with Unity and tried to learn it over the course of several years and I just don’t like it. I don’t like the user interface. I don’t like the gray box level builder. I don’t like their code frameworks. I don’t like C#. I additionally do not like that they keep adding multiple ways to accomplish something and then stop supporting them, leaving developers to hope they picked the right way and it will keep working moving forward. I talked to a bunch of indies who have used Unity for a decade and none of them thought any of this stuff was an issue. It was simply the way things are and you get used to them. I didn’t want to get used to it and wanted to find a better way.
  • Game Maker Studio: I want to start with 2D because my art skills are not great yet, so GMS was an option. It seems somewhat easy to learn and use, but it utilizes a proprietary scripting language and it charges you money for its use. Neither of these is ideal. Also, one reason I was interested in GMS was because I read Spelunky was created in it. After reading Derek Yu’s book about Spelunky, I found that he prototyped it in GMS and then actually built the version I play with in a custom engine. So this doesn’t seem like a good long term option.
  • Unreal: I will be honest, of all the engines I tried, Unreal was my favorite. I liked the frameworks. The shader builder was slick. The interface was nice to use. It actually works because the people who built it use it to ship games and things don’t just fall into ruin. It also open sourced its code so you can look at how things work and put in fixes if necessary. My only real issue with Unreal was that it is designed around larger teams doing 3D shooter games. A lot of the code is abstracted away to facilitate teams with a bunch of non-coders. In order to set up a 2D game I would have to position all the elements in 3D space and set up a camera. I really don’t want to do that. I loved learning Unreal while I was working with code, but once I had to work with the gray box environment, my brain would just black out. I’m sure there are ways around using the gray box, but I am too frustrated to deal with them right now, so I am considering revisiting Unreal once I have more experience building things.
  • Godot: I was under the impression that I had to use a language I do not know for this, so I didn’t seriously explore it. I will revisit in a few years as it seems to be changing and advancing quite rapidly.

While I was trying to learn Unreal, I realized I don’t feel comfortable with C++ code and syntax, so I decided to actually take a deep dive into the language. Everyone was warning me away from it because “It’s terrible!” But I didn’t actually find it to be so. I know the warnings are from people trying to debug code other people wrote that is in production and so forth, but I found the actual language to be well designed and similar to languages I already know and like. I am sure I will grow to hate it as others do, but for today I have found it surprisingly pleasant to work with.

I worked through a book on C++ game development that used the Simple Fast Media Library (SFML) to place sprites and do rendering. This library also felt very intuitive to work with. I found working with this language and this library to be the most intuitive way for me to work on games. So this is the combination I will utilize for at least the next year.

SFML also has a template that can be applied to Xcode to allow me to use Xcode for SFML development. I spoke with one of the maintainers on Twitter who indicated that I can build code I wrote in SFML to desktop and mobile devices. At this point I don’t need to ship to a console, so this is sufficient for my needs.

I don’t know if this counts as building my own engine or not. I’m trying to avoid touching low level rendering as that is a rabbit hole. SFML wraps OpenGL so I don’t have to get that working to build games, so there is just the right amount of abstraction for me right now.

A lot of the past couple of years has been me trying to force myself to learn stuff that doesn’t go with how my brain works. I logically understand that using an engine gets you a lot of advantages. But most of the big ones are not designed for people like me. For better or worse, I think in code. I have never been good at thinking about things in 3D spaces and I really do not like how the engines are designed around building visuals in these spaces and attaching scripts to them. I understand if you are building Fortnite that this functionality is vital, but it’s not if you’re building Candy Crush.

When you are learning a new skill, it can be overwhelming because there are fifty things you don’t understand. Knowledge comes from slowly learning bits and pieces of these things and winnowing them down until you don’t understand a third of them. Then you stop noticing the things you didn’t know before and can focus on the few things you still need to understand.

My hope is to spent the rest of this year and all of next year building small games. I would like to “ship” them by uploading them to something like Itch.io and selling them for a buck. I hope that after I have done this three or so times, I can come back to something like Unreal and feel more comfortable with the interface as I won’t have to learn the language and how to build a game.

If you are struggling to learn something you really want to understand, it’s okay to think about why you are struggling. Is it the tools? At what point do you just give up on something even though you don’t want to? Is there a way around the thing you don’t want to do? Not everyone thinks the same way and it is totally okay to pursuit a different direction if what you are currently doing isn’t working.

Change is Hard

About once a year since I started working on my Metal book, I think I should get back to my blog. My blog was an important tool in my learning process at the beginning. I don’t know if anyone read it or got anything useful from my fumbling with learning the Cocoa frameworks, but it did give me a spot where I could work through what I was doing and write it out to better understand it.

While I was working on the Metal book, it really didn’t make a lot of sense to write on my blog because I was writing a book. Anything I learned was going into the finished product. I didn’t have much to say and figured I would get back to things once I had something to talk about.

Then came the burnout.

I burned out before the pandemic, which was a blessing I guess? After spending a year converting gin into prose, I really didn’t want to come back here and try to find some piddling thing to write about with some tiny project illustrating something. I was tired. I didn’t want to produce content anymore. I also wasn’t really sure if I knew how to create and present content to teach people stuff. And I really didn’t think I wanted to anymore.

I got into writing at the beginning because I had a liberal arts degree and I knew I could write. I figured any questions I had as a beginner would be pretty common and so I could document my learning for other people so they would not have to talk to people who didn’t remember what it was like to not know something.

I figured if I kept doing this, eventually I would get better at things. I don’t feel this was correct. I was so focused on producing content that I never really focused on doing anything. I looked at code I wrote in 2015 and I am blown away by how much better my code was in 2019. It was depressing.

I had to make a choice. I had to decide if I actually wanted to be good at something or I wanted to invest all my energy into pretending I was good and hope no one noticed. I don’t want to pretend. I want to actually be good. I don’t care if I get invited to speak at conferences or write books right now. I just want to be good at what I do.

So I took a step back.

Last year, along with everyone else, I got super burned out. I took a five month sabbatical from writing code to learn to draw. I decided to start a new project at the beginning of this year after I got my shit together.

I sat down in December last year to work on a game jam. Everyone I know in game development says it is a great learning experience. I felt ready.

I was not.

I sat down and immediately realized I didn’t know how to do anything I wanted to do. I could do bits and pieces, but I couldn’t connect them together.

I wasn’t ready.

I have spent most of this year going in and trying to figure out all the stuff I didn’t know how to do. I had a horrible realization that most of my mobile development knowledge doesn’t translate to game development. There is not a common language or common design patterns. I had to almost start over.

I am still not sure if I am ready, but I think most of my lingering questions have been answered to some degree. I am going to start. I hope I know enough that when I encounter something I don’t know, it is a small layover and not something that stops me in my tracks.

My current goal with the blog is to write once a week at least about what I am doing. I bitch a lot about Agile on Twitter, but I don’t object to the process as it is described, merely how it is practiced by most companies. I think laying out a set of tasks to complete and updating people regularly about your progress is an excellent way to get things done. I plan to write about what I did, what I need to do next, and why whatever I was supposed to do didn’t actually happen. Life happens. People get sick. Holidays happen. It isn’t necessarily important for every day to be a blockbuster. You simply have to be consistent and try your best to do something every day, even if it’s small and even if it’s just recovering from a cold. I don’t expect anyone to gain anything of value from anything I write here. I write for myself and to stay on track for myself.

At this point, I don’t anticipate returning to iOS mobile application development. I got really excited about it during a time when Apple was releasing game frameworks and had lots of new and exciting graphics stuff. As time has gone on, I have observed most companies either dispensing with iOS native code altogether, or simply using it as a front end for data pulled from a server. This isn’t really what I want to do with my career, so I am following a new path rather than trying to convince people to follow me in a direction that leads nowhere. If Dave Verwer wants to remove me from his list of iOS developer blogs, I completely understand.

I have some plans for blog posts for the next few weeks. I hope to figure out other stuff to include after those ideas run out.

This transition has been hard. It has been going on for several years. I feel silly constantly talking about how I am going to change things. Change takes time. Change takes spoons. But here we are. I hope to not write another post like this in six months. I want this change to take this time.

Corners of My Mind

I haven’t really been blogging much, as anyone who takes a cursory look at my blog can tell. I know that this past year has been pretty terrible for a lot of people, but my issues have been going on far longer.

This is probably going to meander quite a bit. I will try to go back and edit so this isn’t a slog, but I am making no promises.

I got excited about programming because I wanted to make things. If you follow me on Twitter, you know that I bake a lot and that I do a lot of crafting, specifically cross stitch. I consider myself a creative professional. I have a degree in Video Production/Motion Graphics. When I got involved with iOS programming, I saw things like Core Animation and Core Graphics as a way to more fine tune my visual expression beyond making things in Adobe Illustrator or After Effects.

Two years after I started programming, Swift was announced. I love Swift and I think it’s an improvement over Objective-C, but it really changed the tone of the iOS community. All of a sudden, we were getting a bunch of journeymen language nerds coming in who all had opinions about the “right” way to do things. I don’t mean to be a NIMBY about any of this because I definitely was a part of the initial influx of new people flocking to the green fields of iOS development at the end of the gold rush. But no one was talking about how to use any of the core frameworks anymore because they weren’t new and shiny.

With the open sourcing of Swift, there was a large push towards talking about how to make it work on everything. After it became obvious that it would not work on everything, the influx of people began to be more interested in cross platform stuff like Flutter so that no one would have to write multiple code bases for different platforms.

I have a full understanding of why all these things happened. I understand that businesses would rather just employ a single mobile developer instead of needing a specialized Android and iOS developer who can’t make the apps look the same because of different frameworks. But this isn’t why I got into programming.

I have spent years trying to find some happy medium between what I want to do and where the rest of the community is headed. I have been fortunate to be allowed to come to conferences to talk about Metal and graphics, but it took a piece of my soul every time I would have a conversation with someone that went along the lines of “What you do sounds super awesome, but I really need to go to a different talk because I need to learn something I can use at work.”

I foolishly thought if I evangelized the things I cared about enough that other people would care about them too. About two years ago I determined that they really don’t. Again, I understand why. The market doesn’t put a premium on well designed beautiful apps, so trying to make interesting designs is a waste of money.

All of this has been very hard for me. I spent my life feeling like I would never find people who got me and that I would always be this weird person in the corner eating my hair. When I went to my first conferences, I felt like I found all the other hair eating corner dwellers who all banded together to do awesome stuff. As the years went on, it was increasingly difficult for me to accept that this initial group of people all went off to Apple to think different and were replaced by people who just needed to crush code. I went to college with a guy who has been attending for twenty years because he doesn’t want the party to end and I was starting to feel like that.

I decided even before the pandemic to take a step back from the conference circuit and the community to find myself. I wanted to figure out what I actually want rather than what I think people want me to be in order to fit with the current zeitgeist.

I spent a year trying to write another book. It was an unpleasant experience and I don’t think I will ever write another programming book ever again. (Or host a podcast or do any kind of video course…) But one thing that I learned from that experience is that I am approaching things wrong.

I think very visually, but my drawing skills have always been bad. Well, not quite. I learned to draw twice before, but I didn’t stick with it for various reasons and I was terrified to try doing it again because I didn’t want to be bad at it. I kept buying art supplies, thinking one day I would make time to work with them and figure it out but it was never the right time. Around August of last year, burned out from the pandemic, I decided that now was the right time.

I decided not to work with code for the rest of the year and to just focus on learning to draw and paint. A part of my mind opened at that point that I didn’t realize I was holding shut. I have a limited amount of mental energy to engage with stuff and the programming part of my brain had been hoarding it. After I knew I would not need to work with code for a while, a bunch of stuff came unstuck in my head and I felt more myself than I had in a few years.

I have realized that one reason I was encountering frustration in my programming life was because I was trying to use programming as a tool for everything I was doing. I was so afraid to suck at drawing that I learned GPU programming and rendering because I thought there was some magical knowledge in there that would unlock all the stuff that was stuck in my head. By letting it go, I realized that there was an entirely different approach I should have been taking that I had closed my mind to.

All good things come to an end, and the end of my code exile approached. I have made peace with the fact that the iOS community is no longer in synch with what I want to do, and that’s fine. I miss all my friends and hope to see them again one day, but what I want to do isn’t where everyone else is headed. So I made a transition.

I had been tentatively exploring game development for the last few years. I was avoiding it because I had an internship with a game developer that gave me PTSD. I know it pays terribly and working for a studio is probably impossible with someone who has the issues I have. But I can make my own stuff. I can scope projects to be small enough and limited enough that I can do them on my own.

I have spent the first part of this year learning Unreal. I tried Unity but I don’t like the interface or design patterns. It’s just a personal preference.

I hope to publish a game by the end of the year. That is the goal I set for myself. I am trying to scope it as a very limited thing so that I can get practice making goals and setting milestones. I have more ambitious projects I would like to do, but I want to make sure I can finish something without burning myself out.

One thing I had trouble with before was working in 3D space. Again, going back to programming, I always tried to place things in 3D space using programming rather than getting comfortable with the tools and learning to think in 3D rather than in code. It is definitely a context switch, which is something I have difficulty with.

I have felt mentally paralyzed since I finished working on the Metal book. It somewhat burned me out and I never really dealt with it because I didn’t want to admit that it burned me out. I feel bad because I know that people were depending on me to add the sample code I wasn’t able to create while I was writing the book and updating the open source project I had with my husband. I can’t change any of that. It wasn’t that I disregarded people’s need, I simply could not deal with it anymore and I needed a break.

I wish I was a different person. I wish I was super excited about parsing JSON and arguing about reference vs value semantics. I don’t even know what the hell everyone has been arguing about for the last two years. Probably SwiftUI. I wish I was interested in the same things everyone else seems to care about. But I’m not. I came at this from another perspective and I am too old to change it. All I can aspire to be is the best version of myself.

Moon Shot

December 2013

Just about six years ago today I got my first programming job ever. Madison has never really had a thriving iOS work environment and I felt fortunate to find an iOS job immediately.

I was working for a start up that came out of UW-Madison where our CEO was so young that he had trouble paying for our holiday party because some of us (mainly me) had alcohol and he wasn’t old enough to drink. I was the oldest person there by a decade.

When I was a student I kept longing for a programming job so that I could work with people who had more experience than I did and I could learn from them. I wanted to be able to master designing software architecture and be a 10x engineer. That did not happen at this job.

In spite of not having any professional experience, my programming teacher did an excellent job of giving me a good programming foundation. He taught me about code smell. He prepared me for the fact that things change rapidly. None of my coworkers had this foundation. The code was deeply inconsistent. It took a month to implement a feature that should have taken a day because of how poorly the app was architected. They wouldn’t let me fix anything because they had a mythical rewrite of the code that would happen at some point in the future so why bother fixing things now when we have VC deadlines.

After a few months I knew this was not going to work out. I became deeply depressed. I had these dreams about what software development would be like and this was not it. I was afraid if I got another job it would be exactly like this one. I had an existential crisis.

I knew people through conferences that didn’t work at places like this. I knew they were out there. No job is perfect but some are better than others. I knew I wanted to get to one of these place but I didn’t know how.

I developed a five year plan for myself. I had a list of five companies that I would consider to be “making it” if I got to work there. I had goals of doing more conference speaking, hopefully internationally, and to write books. I decided I would not take any job that did not put me closer to doing something on my list.

Of those five companies on the original list, I got to work at three of them. One was a disaster, one was simply not for me, and the last ended because I decided I would rather date my boss than work for him. We got married last year and I don’t regret anything. But I do miss having a deeply collaborative work place where I could learn from someone who knows way more than I do and was patient in answering all my stupid questions.

I got to do a lot of conferences for a few years. I got to go to the UK twice. I had two years where I spoke at 10+ conferences in a year. It was fun for a while to get on a plane and jet off to some interesting location and meet a bunch of cool people who gave me a community I never felt I had. But a lot of these conferences don’t exist anymore. People don’t seem to be going to the ones that already exist and the energy is different there.

I finally got to publish my first solo book back in 2018. I spent most of 2017 locked in my house to get it done. I would have liked to have had more time to make it better, but given the amount of time I was given I am proud of what I was able to accomplish.

I accomplished basically all of my five year goals in four years. It would be three if I didn’t count the Metal book. Any time I feel depressed about what I am doing, I try to look back at where I was in 2014 and remember how far I have come and how impossible all of this looked.

2018

Last year I realized I had accomplished my five year goals. So at that point, I began to wonder what comes next. Up until I completed my Metal book, I always had a next thing I wanted to do. I had a company I wanted to work for. I had a book I wanted to write. I had an app I wanted to publish. After the Metal book, I kind of fell off a cliff. I had no real motivation to do anything. I had no end goal in mind.

I had thought when I started with Metal that I would build a consulting practice around it, but I ran into road blocks. First, most people don’t need a Metal programmer. Second, I couldn’t get people to agree to my rates. The rates I was asking were for what I would get for just regular iOS development and people were outraged that I would dare to ask for more than $60 an hour. Some wanted me to do their work for free as a test of my skills. This is no news to people who do consulting for a living, but I don’t want to deal with this crap.

I thought maybe I could write books. I know people who are prolific and can write a lot of books very quickly. I thought if I could churn out a book every year and maintain them that I could make that a sustainable job.

I made an agreement earlier this year to work on an ARKit book. I had hoped to get it done by the end of this year. It’s not even halfway done. I got sick earlier in the year and we had some stuff going on, but I was never really able to get and maintain any kind of momentum with the book and my heart wasn’t in it.

Also, I began to feel like the world was passing me by. My husband left his long term job this year to go work for Google. He comes home and tells me about all these amazing (public) breakthroughs they’re having in machine learning and all I can do is tell him I spent the day responding to editorial feedback and drawing a node tree diagram.

I don’t think I have the stamina to work for a place like Google, but I hate feeling like I took myself out of the game.

I had a really pissy conversation with someone on Twitter about whether or not I had to rewrite my ARKit book to use SwiftUI or not. He talked down to me about how no one would buy my book if I used UIKit and quoted that Jobs/Gretzky thing about going where the puck is going to be and not where it is. First off, I’m a tech person. I know the quote. Second, SwiftUI isn’t where the puck is going to be. It’s where the puck already is.

I began to feel actively resentful of the book because I feel like I have a decent idea about where the puck is going to be in five years but I couldn’t do anything about it because I had to finish the book.

For at least a year, I have felt stuck. I know that the things that worked for me a few years ago are no longer working for me. I can’t speak well at conferences anymore because I had a nervous breakdown and I get overwhelmed too easily. I don’t want to keep writing books because the stuff I am interest in is different from what the rest of the community wants to learn. I don’t want to be a consultant. I don’t want to work for anyone. Where do I go now?

Moon Shot 2025-30

On May 25, 1961, JFK announced to Congress that he was setting a goal for our country to put a man on the moon before the end of the decade. It was an audacious goal. It required a tremendous amount of money, man power, and cutting edge research. But we did it. We haven’t done it since because we’ve lacked the political will to dedicate ourselves to an expensive goal that would happen during someone else’s term.

I have a moon shot project. I found out about something that made me excited earlier this year and opened up possibilities in my head. The technology is new enough that it really won’t be ready for production for another few years. It could also disappear in the wind between now and then.

I want to do my moon shot project.

I don’t want to say what it is because I haven’t done it yet and I don’t want to come on here and say I am going to do something and then have to look at this post in six months and be irritated with myself for saying something stupid.

I am not afraid of someone stealing my idea because I know no one is going to. I am not afraid of someone telling me my idea is stupid because I already know that most people would and what their exact arguments are for why my idea is stupid, which is informing my design of the project so that I can eventually win these people over by resolving said issues.

Over the last few years, Jaimee Newberry has been doing a lot of great conference talks on motivating yourself to accomplish your dreams. She’s an awesome person who started a company where you can draw anything you want to and have it printed on a piece of clothing. She gave an awesome talk earlier this year about all the work they put into making this happen. She’s an inspiration.

While she’s better known for using this video, she has another one that she used just once that was only like five seconds long that I am unable to find. The gist of the video was a guy saying, “The only thing standing between you and everything that you ever wanted is you doing it.”

This has really stuck with me, even more so now. Since the beginning of this year, I can do anything I want. I don’t have to take a job for a paycheck. I can build and do anything I want. The only standing in the way of me doing my moon shot project is me. I am afraid it’s a fantasy I have for myself of a thing that would be cool to tell people I did and less of a tangible problem I want to solve for myself. I worry I can’t come up with the right stepping stones between where I am now getting to where I want to be. I am afraid I don’t have the motivation to make myself get up every single day, go sit at my computer, and just knock it out. It’s a marathon. If you’re doing a big project you have to make small goals for yourself or else you will go insane. I am afraid I am going to get frustrated and quit.

I do know I am tired. I am tired of feeling like I am not working towards something important and significant. I am tired of feeling like I am not improving. I am tired of feeling like I am irrelevant because I don’t want to be the first person with a blog post on the new shiny thing. I am tired of telling myself that I don’t care that no one else is interested in the things I am interested in and that if no one reads my book or plays my game that I don’t care. I want to care. I want to believe in something and advocate for it for some reason other than I happen to find it personally interesting.

I believe in this.

Establishing a Routine

When I began learning programming in 2012, I knew I needed to focus. I gave up a lot of stuff to learn programming, but I was able to motivate myself to get working every day. The same thing happened with the Metal book. I woke up every day knowing exactly what I would do. I had short term things I wanted to do each week with a longer term goal in mind. I have found my routine comforting when I am able to get into it. With that in mind, here are some guidelines I am going to follow for at least a year to see if I can establish my routine:

  • No books. I keep being tempted into writing books because I find it comfortable and familiar. They are a distraction from the things I actually need to be doing.
  • No conferences. I have a few hand picked conferences I may attend as part of my project, but I am not going to impulsively apply for a conference next year because I think it would be fun to hang out with my friends. The most recent conference I went to was so overwhelming I basically hid in my room when I wasn’t speaking. They’re hard on me and I need to focus on other things.
  • No unrelated technology. When I am getting burned out on a project I tend to have escapist fantasies about learning new stuff. Learning beginning new stuff is easy and comfortable because you don’t have to maintain it or get it to do things that are hard. It’s a distraction. I have to focus on just want I need to do.
  • Learn to say no. I have taking jobs/projects from people because I was afraid to say no. I want people to like me. I also remember the time before programming when I couldn’t find a job. For a long time, saying no to something was just unthinkable. But you have too. At some point, you have to make a decision about what is important because you have a limited amount of time and energy and care to give to something. I’m going to be greedy and hoard all of my care and energy for something that’s mine.

I would like to get back to blogging. Short form writing is okay. I can just vomit a bunch of words out of my brain and dump them online and go about my business. It’s different from doing a book where you have to carefully plan out everything you write and carefully go over it with a fine tooth comb for editing purposes. I find writing cathartic and I like to be able to just use my blog as a Pensieve where I remove things I don’t want to think about anymore so I can focus on other stuff.

I know this project will be harder than I think it will and take longer than I anticipate. I know tech changes. I know someone else might do what I want to do before I can. But I believe in this. I am going to do whatever I have to to keep myself from standing in the way of me doing what I must. No excuses. I choose to go to the moon.

Pivot to Video

Every year it happens. WWDC comes and unleashes a bunch of new stuff for all of us to learn. For most people the last few years, WWDC hasn’t been that exciting because it’s primarily been graphics and augmented reality stuff. For me, it’s been Christmas. I love Metal and ARKit and all the new shiny graphics stuff that gets released each year.

However, inevitably I will encounter some aspect of my workflow that doesn’t involve low level graphics. I will have to connect to a network backend. I will have to figure out the new user interface framework.

I want to get back to my fun graphics stuff as quickly as possible, so I Google tutorials and sample code for these things I don’t want to think too much about. The results come up. Perfect! I found exactly what I want!

I click the link and my heart sinks. Instead of a nicely written blog post or article about the technology, I stare into the void of a 5+ hour video course someone put together.

Videos Are Terrible

The last few decades have show the emergence of this idea of different learning styles. Some people are “visual learners,” whatever that means. Some people learn things by doing, which to be honest is basically how everyone learns?

This has unleashed this unholy deluge of instructional videos for the poor, underserved portion of the population that learns by watching other people talk. These are probably the same people who learn by listening to the same three white dudes in tech talk about cars on podcasts.

I’m sure there is some portion of the population that learns by watching videos. And videos have their place. I love watching short cooking videos. Cooking is a physical thing and watching how someone folds a dumpling or condenses a 3 hour baking project into a three minute video that cuts out all the prep work and waiting can be quite instructive. None of that applies to programming.

Programming isn’t suited to a video medium

I know that someone who won’t read this blog post is going to “Well, actually…” me on how video is great for programming because it shows you how to use the IDE/game engine/etc… I am not talking about videos on how to use storyboards or set up an animation loop in Unity. I am talking about code. Words you type into a text editor or IDE with no software interface.

Programming is inherently word based. I have used the analogy that programming is what you would get if Math and English had a baby. It’s got language and syntax and grammar. All of which gets lost in translation when you have someone trying to verbally read it out loud.

Every bad tech talk I have attended at conferences goes the same way. The presenter spends a few minutes introducing the topic of their talk and gets everyone excited about using the framework. Then they pull out all the slides covered with code and it all goes downhill from there. People’s eyes glaze over. They start chatting on Slack. They surf Facebook. Everyone waits for it to be over, but hey, beats being at work I guess?

Code wasn’t meant to be read out loud. It’s the most efficient compromise you make with the computer to be able to communicate. You can read through code and bounce around asynchronously to see how everything works in a way you can’t if someone is just talking.

If you have a nicely written tutorial and you didn’t quite get something, you can scroll back to see where you got lost and review what you don’t understand.

Which leads into the next point.

You can’t search for what you need

It’s incredibly frustrating to spend hours looking for something that covers the exact topic you need, only to find out that the presenter isn’t going to cover the part that you need. When you have a video, you have no idea what the specifics are that the presenter will actually cover. I went to an Accelerate talk where the presenter said that he would not cover any of the math that the framework utilizes, which is basically the entire point of the framework!

If I am dealing with a book or documentation, I can utilize a search function to see if the document I am looking at contains what I need. I can zero in directly on the part that I need to understand and be on my way in a few minutes. If what I want isn’t there, I haven’t really invested anything into it.

If you’re dealing with a video, it’s a crap shoot as to whether the author is going to speak about the one specific thing you need to know at any point in their long rambling video. Sometimes they are helpful and will give chapter titles so you can guess if they’re going to talk about the thing you need to do. But usually the author has created an elaborate project that is dependent upon you watching everything up until that point for anything to make any sense.

You can’t do anything else

I learned to code by working through the Big Nerd Ranch iOS book multiple times. I didn’t quite understand the concepts the first time through, so I would do them again and again. By the time I got to the fourth or fifth time, my brain had been introduced to the concepts enough that it began to understand how everything works together.

To keep myself from going insane, I would throw on episodes of Star Trek: The Next Generation. I worked through the entire series by having an episode on while I coded through a tutorial. This worked for me.

If I have an instructional video on, I literally can’t do anything else. I’m held hostage. You can’t read or check email because you miss something and have to rewind to figure out what someone said. If you’re coding along, you have to keep pausing and rewinding to catch what the person said. You endure long bits of watching someone writing the same code as you in real time. This is miserable and tedious. Not to mention mentally exhausting in a way that reading is not.

I do have some Unity videos I will throw on in the background, but I do this knowing that I am not engaged enough with the material to actually learn it. I can’t do this for something I must use for an active project.

If I am working with written materials, I can take mental breaks for a few minutes and come back. I can copy/paste code if I don’t quite get it written correctly. I can reread things a few times if I didn’t quite get it the first time. I can have on music or do literally anything else to make it easier to stand at my computer for hours force feeding myself technical information.

Back when I used to work for people, I would be asked to figure out something I didn’t already know. Rather than flailing blindly around I would look for something written that I could look through to learn the things I need to get working immediately.

It’s a lot easier to sell your employer on the idea that you’re actually working if you’re reading something and have a code editor open. If you’re watching a video, it looks like you’re slacking off. It also means that if someone interrupts you, it’s way more disruptive than if you are reading something. In the age of surveillance capitalism, it looks bad if you try to learn something by watching a video. This is not the case if you are reading something. Perception matters.

The podcast problem

I don’t listen to podcasts, which is ironic because I have hosted three of them. Podcasts tend to be two or more people rambling about some topic and making in jokes that only they find funny where nothing is edited out. Sometimes you get someone who knows enough audio production that they will fix levels and remove long awkward gaps in conversation, but rarely do you get a well focused discussion about a topic with an interviewer who not only knows what questions to ask but who will keep the conversation on track.

A lot of instructional videos are people just kind of turning on a screen capture app who then begin to work on a demo project they feel like working on. There isn’t really an agenda for them to follow. They don’t think about how best to present information. They leave in their coding errors.

It’s this idea that it’s a lot easier to just record yourself talking than it is to have a well thought out plan as to how you are going to take a complicated topic and explain it to someone who doesn’t know everything you do.

Final Thoughts and Complaints

I really do not understand why this video explosion has happened. I don’t know if it’s similar to that Facebook pivot to video ads where they lied to people about the impact of video and everyone dove in wallet first and got screwed over.

It may just be easier to half ass a video than it is to write a good tutorial. There was that ghastly Hacker News bit saying that a group of coders could start up a news room in a month which was totally bullshit. Writing is a skill. A lot of people are not good at explaining things. Everyone complains about the quality of Apple’s documentation coverage, but think about how hard it is to scale up a team of people who are not only technically savvy enough to understand all the code but can also write clearly. There are a limited number of people out there who can do that.

That isn’t to say you can’t improve. The first few things you write might be terrible, but if you know they’re terrible and it bothers you, you can work to improve it.

I dunno. I might just be a crusty old person who is stuck in my ways yelling at the kids to get off my lawn. But after they do I am going back to my she shed with my programming books and my 600 queued episodes of Chopped.

Bullying

I have a bully.

Not a sexual harasser or a rapist or a men’s rights activist. A good old fashioned playground bully.

I have mostly kept this story to myself for over a year, but I don’t feel I can continue to do so. It is destroying my peace of mind and making me feel terrible. I tried to ignore my feelings about this, hoping they would go away, but they have not. I need to share my story in order to move on from this.

I’m not posting this because I want anyone to do anything about this specific incident. I just want people to listen and to understand.

The Beginning

My first interaction with my bully was back in 2015. 2015 was the first year I really got into conference speaking. I had finished up school the year before and conference speaking was the only way I had to network and get my name out there in order to find a job.

I was invited to speak at a conference in 2015 by a friend of mine. As many of you know, I used to be in an abusive marriage. My previous husband would not allow me to have money to buy textbooks while I was going to school for computer programming. My friend sent me books, watched my first shitty conference talk while it was being live streamed, and used his connections to try to help me find a job.

My friend did this when I was nobody. I wasn’t an author yet. I didn’t have a blog. No one knew who I was. He helped me because it was a kind thing to do and he had no expectation that I would ever become anything. To me, the way someone treats you when they don’t get any benefit from it means a lot. I see way too many people who only network with people who are more visible than they are and tell anyone just starting out to fuck off. I don’t like those people.

I was invited to speak at a conference my friend was organizing, but I could not make it because I found out my ex-husband had put us significantly in debt. I felt very sad about not being able to go.

My friend also invited my bully to the conference. My bully could not go for different reasons than I had. They were very vocal about how unhappy they were with my friend regarding his handling of his conference. They started a Twitter mob against my friend and started a whisper network around him.

I felt some loyalty to my friend after his working to help me before I had a career. I kept hearing people at conferences say how terrible it was that he was being attacked, but no one said anything. I was probably dumb, but I put my neck out to defend my friend because no one else would. I understood that my bully would be unhappy about my defense and I really did the best I could to say this whole thing was probably a misunderstanding, as is wont to happen when people communicate online.

After I posted that post, the talk stopped. I thought I made a difference and got people to leave him alone. I now realize it’s probable that people were still talking about him, but that I had shown myself to be untrustworthy and thus no one included me in these conversations.

I knew there would probably be repercussions for my actions, but I figured I did the right thing and I would feel morally okay with whatever the blowback was.

2018

Four years passed and I didn’t feel the blowback. I noticed I was never invited to a conference my bully was speaking at, but that was fine. I didn’t really care to interact with them.

My luck ran out in 2018.

A talk of mine was accepted at a conference. I had to spend nine months working on it. It was incredibly labor intensive, but I was happy to have the opportunity to speak.

Three weeks before the conference, I saw that the conference organizers announced my bully would be a keynote speaker at the conference.

I wrestled with what to do. I hadn’t had any contact with my bully in four years. I half hoped my bully had forgotten the whole incident and found someone else to be mad at about something. I thought about approaching the conference organizers about the situation, but I thought that would be petty. My bully hadn’t done anything so what would I complain about? What could they even do about it?

I found out.

Six days before the conference I was contacted on the conference Slack by the organizers telling me that they had to talk to me and had set a meeting for 10:00 the following morning. I kind of joked that I hoped I hadn’t done something wrong. They repeated that I was required to speak to them tomorrow morning at 10:00. They would not elaborate what had happened or what we would be speaking about. I had a sinking feeling this was about my bully. I was right.

The organizers, looking like police interrogators, told me there had been a complaint about me. They said they did not want to hear my side of the story because they didn’t care and would not believe me. They told me they had stringent conditions I was required to follow if I was to be allowed to keep my slot at their conference:

  • I was not to be within 500 feet of my bully
  • I was not to be in the same room as my bully
  • I was not to speak to my bully
  • I was not to speak about my bully to anyone at the conference
  • I was not to attend a networking event my bully wanted to attend
  • I was not to tell anyone that this conversation happened

I was dumbstruck. I was not surprised my bully had complained about me. I was surprised at how I was being treated by the organizers. I considered them to be friends. I had had them to my house and they had slept under my roof. They met my parents and I had fed them food I made myself. I considered this to be a deep transgression of my hospitality and relationship with them.

My initial inclination was to tell them to fuck off and that I would not attend their conference. I felt that this would have looked bad professionally. I spent nine months working on my talk and it could not be replaced easily. I was also bringing my now-husband with me. He had bought a conference and a plane ticket. I didn’t feel I could tell him that he wasted that money because I was being petty.

So I swallowed my pride and faked my way through the conference. I spent most of the conference hiding in my room with my husband. I came out for my talks and for meals. I briefly saw my bully as I was taking my dog outside to walk her and I was terrified that they would complain about me violating the terms of my parole and have me kicked out before I could give my talk.

The biggest thing that bothers me about this situation is that I had reported harassment two years earlier, the first time I attended their conference. Someone at the conference touched me inappropriately and tried to get me to take them back to my hotel room to have sex. I reported the incident and they didn’t believe me. They told me it was a misunderstanding, the perpetrator was European, and that I had misunderstood his intentions. I had to physically demonstrate on one of the organizers how I had been touched for them to take it seriously.

So like sexual assault is just fine, but just make sure you don’t defend someone on Twitter? I wasn’t allowed to tell anyone about that incident either. My bad.

Aftermath

I tried to tell myself that none of this is important and that I didn’t care. I felt deeply foolish for thinking these people were my friends when they clearly didn’t feel that way about me. I felt like I had been conned and was too stupid to realize it until it was too late. I was angry about the number of hours I wasted working on their projects and I wanted that time back.

I broke my agreement to not talk about this incident a few times with a few trusted friends in the community. Any time I tried to obscure the name of my bully, they always immediately knew who it was. No one I told was surprised any of this happened. They were always deeply sympathetic and told me that everyone knows how this person is.

Imagine my shock to see my confidants going out of their way to socialize and interact with my bully. I would see them having long involved conversations on Twitter or being asked to collaborate on their side projects.

I called one of them out about this. I reminded him about how I had been treated. His response was, “Yeah, but that has nothing to do with me. I can be friend with both of you and be Jonny in the Middle because I’m basically Switzerland.”

At first I tried not to let this bother me. I didn’t want to tell my friends they had to choose between me and a bully because that seemed shrewish. Also mostly because I know that my side would not be chosen. But the longer this goes on, the more this bothers me.

All of these people know this person is a bully. They know this person’s behavior is terrible. Conference organizers know that this person will ruin them on Twitter if they don’t do everything the bully says. So why do they keep giving my bully a platform? Why do they keep inviting the bully to speak and give them power and visibility? Why do they knowingly stick their neck in a noose and then punish anyone who threatens a situation where it might cut off their air?

I kept thinking that one day someone would catch wise to this situation and they would stop inviting my bully to speak, but it hasn’t happened. I realized that it’s not because people don’t know this person is a bully. It’s because people don’t care. They don’t care that this person treats people badly because they get something out of interacting with them.

That’s the piece that clicked into place that really made me feel I needed to talk about this. I knew my bully had mental health issues. Not that it’s an excuse for behavior. I don’t blame them for complaining about me to the conference organizers. I expected them to. I would not be surprised if my bully used their clout to keep me away from any conference they were at for so many years.

The people I do blame are the ones who know this is happening and do nothing.

I don’t know how I can continue to be friends with people who knowingly associate themselves with an abusive bully. I don’t know how they can feel that it’s okay for someone to ruin people’s lives as long as it’s not theirs.

I also keep thinking about how this was how I was treated when I WAS A SPEAKER!! I keep thinking of all the people this bully might have damaged who didn’t have the clout/visibility I do. What if I had been an attendee? A student? How many people have had their careers damaged or left the community because they ran afoul of this person? We’ll never know.

What Do I Want Out of This?

Here is what I DON’T want out of this:

  • I don’t want anyone who figured out who these people are to harass them on Twitter in any capacity. That’s their MO, not mine.
  • I don’t want to start a feud. This is about me talking about my feelings, not trying to start some kind of retribution against anyone. I’m not trying to damage anyone’s business/living because I feel slighted. I just want to be able to speak openly about how this made me feel.
  • I don’t want an apology. The organizers made a calculated risk that they could treat me like shit and have nothing bad happen to them because I have no power to make their lives miserable and they were right. That burns me up a little, but it’s reality. I don’t want a fake apology from anyone trying to make themselves look better. The bridge is burned and it’s not coming back.

I do want two things out of this. The first thing is I just want to talk about how this made me feel. I feel deeply angry and hurt by this situation. I have bottled this up for over a year and I am tired of it. I kept telling myself I had no right to feel upset about this because there are kids locked in concentration camps along the border and the world is slowly microwaving to death. Being slighted at a conference is the most First World Problem there is. Also, I may be in the wrong here. What if I did something terrible and I was told not to tell because it would look bad for me? I know I should get over this and if I just keep trying to be a good person and ship projects that in the long run this doesn’t matter. But I feel I have the right to my anger and my pain regarding this.

I want to be clear that I didn’t expect the organizers to tell my bully to fuck off. I was pretty sure my bully would complain about me, but I wish the organizers had handled their interaction with me differently. Instead of treating me like a pedophile caught next to a playground, I wish they had privately reached out and been like, “Hey, look. Someone complained about you. We know you’re cool. Do you mind just like avoiding them so that they don’t cause an incident?” I would have been like, sure, no problem. See you next week. They chose instead to completely burn our entire personal and professional relationship. It wasn’t necessary. They chose to do it. That kind of stings.

I want to get over this. This is a festering wound that never heals and constantly reopens over nothing. I don’t trust people who were my friends. I don’t feel comfortable or trust anyone anymore. I am consumed with a desire to become so powerful that no one can ever fuck me over like this again. I hate feeling this way. I want to build things that make me happy. I want this to not bother me anymore.

The second thing I want out of this is for people to realize there is no neutral position in a situation where someone is being bullied or harassed. If someone is being bullied because they disagreed with another person’s behavior towards someone else and they are being harassed, you don’t get to sit there and think, “Sucks to be them! Should have keep their mouth shut!” and still be a good person.

There is a somewhat large subset of people on Twitter who feel that any kind of disagreement with them constitutes harassment. It does not. Hating someone isn’t justification for complaining about their presence at a professional event.

How to Handle Bullying

Here’s a handy guide to dealing with bullying.

If you see someone being harassed, you gently insert yourself into the conversation and you tell the harasser that their behavior is inappropriate. The harasser must back off and apologize and the incident is over. There is no retaliation or blame from either party. It’s just over.

If you see someone try to step between a harasser and someone else who is also being harassed, you don’t sit back smugly and think they should have kept to themselves. You step in and also assert that this behavior isn’t acceptable.

This works even in the situations where people are afraid of being called out as creepy or socially awkward. If you are bothering someone and you don’t mean to, the person just wants the behavior to stop. Someone lets you know that you are bothering another person, you apologize, and you leave them alone. Kindergartners understand this. Had I been asked to apologize to my bully but be allowed free range of the conference, I would have been happy to do so. But the point was retribution not fear.

Bullies are allowed to act the way they do because most people sit back and let it happen because they figure it’s nothing to do with them. It is to do with you. If you sit back and let people behave this way, you’re contributing to a hostile environment. Your friends see when you sit back and let them be treated like crap. They remember. They pretend it doesn’t hurt them when you tell them later that what happened sucked but you didn’t want to get involved, but it does. You are hurting your friends when you let them be harassed.

We can’t do anything about the concentration camps along the border or the inevitable heat death of the Universe, but god damn it, we can make our community a little bit more welcoming and friendly place for everyone.

Post Book Stress Disorder

In sports there is a concept known as The Yips. It’s a condition that affects experienced athletes where they develop spasms in fine motor movements that impact their game in a profound way. It’s generally in culture ascribed to the athlete letting their head get in the way. They begin to overthink things too much. It interferes with their movements, causing them to do poorly. This creates a negative feedback loop where they are doing badly because they’re thinking too much, which causes them to think even more and do even more badly. It can completely destroy an athlete’s career.

Back when I started with tech, I didn’t have a lot of experience with programming, but I did have a lot of experience with writing and speaking. I delivered radio news for three years. I had a journalism degree. I knew that I could present and deliver information in a clear concise way. The big problem I had was that I was limited in what information I understood that I could present.

I had the opportunity to write several books early in my career that I felt very proud of. These were generally introductory books, which contain information that tends to be easier and more fun to present.

That changed two years ago when I was given the opportunity to write a book on Metal. I felt very strongly that I could learn and explain Metal in a way that was understandable because I was coming at this as a beginner. Everyone I spoke to who knew Metal was someone who was very familiar with OpenGL and didn’t really understand what a beginner would not know about. There was a lot of unfamiliar terminology that you need to have a good grasp of in order for Metal to be useful. I had a lot of confidence that I could present this information in a presentable way to people with no graphics background.

During the process of writing the book, I didn’t really have time to think about what I was actually trying to do. I was laser focused on accomplishing one task at a time until the book was done. It was an intense but satisfying experience to watch as my small steps added up to a full book.

I needed a break from writing, so I didn’t blog much or work on a book in 2018. During that year, I had some time to think. And the thoughts I had weren’t very pleasant.

When I completed the book I was proud of what I was able to accomplish in the time I had available. I felt that it would take two years to write a good book on Metal. I had about ten months. I didn’t have time/resources for the number of graphics I wanted for the book or the amount of sample code I originally planned for. When I finished I felt that I had had the minimal amount of time to write a book that I would not be embarrassed by. But not being embarrassed by something is vastly different from being proud of it.

There are several chapters of the book that my tech reviewers were deeply disappointed in. One of them has blocked me on Twitter. The other one will not speak to me. I don’t know if this is a reflection on them or on me. I don’t really understand socially what happened and it upsets me to know my peers do not like or respect me.

I have begun second guessing myself on the book. I don’t know if I presented the information well. I keep worrying that people who read the book are judging me and deciding the book was bad and that I exposed myself as a fraud who doesn’t know what I’m talking about.

I finally began reading through the book the Wenderlich’s published on Metal after having to get over my fears of it being far better book than my book was. I think it’s a better book than mine and they cover a lot of the material in a much more comprehensive manner than I cover my material, but I also feel the book is incredibly dense. I only understand the material presented because I took off nearly a year to fully understand Metal to the point of writing my own book. I don’t want that to come off as bitchy or dismissive of their book because it’s full of a lot of great information. It’s a great book for me and I am grateful that it exists, but I do wonder how much help it is to people without the same background I have.

I have begun to worry that this material is completely unpresentable. That there is no way to simply explain things to new users. This is causing me to second guess my ability to present any information about anything. I don’t know if I actually was ever good at presenting information or if it was just hubris on my part.

I am considering writing another book on a far less complex topic than Metal, but I am wondering if I have anything to contribute to that topic. I am wondering if I should bother writing anything because I don’t know if I can present information clearly in a way that people find useful. I also don’t know if anyone gives a crap about the things I want to talk about because it’s not about algorithms or cross platform JavaScript frameworks or network protocols. This is causing me a lot of depression and anxiety.

I don’t know if I should take this as a sign to give up on writing technical books or if I need to jump back in so that I can get over this. I keep going back and forth. Some days I am super enthused about the idea of writing a book from my own perspective. Other times I feel like I am just copying work other people have done but in a much less compelling way.

I feel the urge to hide. I don’t want to talk to or deal with anyone. I want to be left alone. I want to just work on crappy little projects that will never earn money that I do for myself because I have given up on the idea that I have anything of value to contribute to the tech community.

I keep trying to tell myself that completing the Metal book was an accomplishment. I wrote that book in less than a year. I wrote it by myself. I got up every day and stuck to a plan and shipped something. It’s not perfect. But for better or worse it’s presented in the way I felt it should be presented. This was a challenge and I don’t know if there is a right or wrong way to present difficult materials.

My hope is that anyone who reads the book and is disappointed by the content that they at least understand that I worked hard and did what I thought was right. I did the best I could under the circumstances that I was given. I don’t know if I would have done things any differently had I to go back and do it over again. But now I have to deal with wondering where I stand and what I have to contribute to the community.

2018 Changes in Latitudes, Changes in Attitudes

Happy 2019 readers! This blog has been on something of a hiatus for the last two years and I would like to rectify that in the coming year.

2018 was a time of some rather big changes for me. At the end of 2017, I moved in with my boyfriend. We fell into a rather comfortable routine. My job allowed me enough down time to work on side projects, such as my game development blog and a new third-party framework.

As 2018 progressed, I left that job and began a consulting contract. I had a year to complete the contract and I was slightly burned out, so I worked that part time. This allowed me to continue to work on the third party framework, which I had hoped to complete the port of by the end of the year.

But, life gets in the way.

In March my loving boyfriend asked me to marry him. I joyfully accepted and we set a wedding date for September. I had already planned out what we were going to do. The wedding would be quite small. I figured that it wouldn’t disturb our routine that much and I could continue work on my side projects.

Let’s just say this did not go to plan…

Beyond the actual wedding, there were a lot of things that needed to be taken care of. There was paperwork and deadlines. I had to go through various processes to get my name changed. There were dress fittings and meetings with the minister. All of my mental energy that I had been using for my side projects went into the wedding/marriage.

The whole family at the wedding. Mazel tov!

I think I have written on here before about the depression I suffered after my first marriage officially fell apart. I thought when I got my ex-husband out of my house that all of my mental energy would be free to work on projects and do things I care about.

I didn’t realize that the huge change in going from being married to being single would be a tremendous shock to my system. I had never paid taxes before. I hadn’t paid the water bill before. I had no idea what any of my expenses were because I never saw them before. I now had to handle those things and budget for them and figure out how to feed myself. This threw me into a shock and it took a few years to shake off.

Even though the wedding was a nice disruption to my routine, it was still a disruption. I had a lot of trouble getting motivated or focused on my side projects because I kept worrying about something I needed to do for the wedding. I knew it would be over soon and when it was that we could get back to our routine and I could continue with my projects.

Again, that turned out not to be the case.

When I moved in with my husband, I wasn’t really comfortable with the house. It was his house and even though I gradually made it feel like our home, there were some issues with it. I didn’t have a room that worked well as a home office. I converted a bedroom to my office, but it was still a bedroom. It had closets and was in an upstairs corner of the house. We couldn’t open our window shades because the houses next door were within touching distance and we didn’t want people to look in. We had basically no yard, so that was hard on the dogs.

Instead of weekends spent lovingly working on game and graphics projects, we attended open houses and got our hopes up on homes that didn’t pan out. It was mentally and emotionally exhausting.

My new dedicated office space!!

We found a lovely new place that suited most of our needs perfectly. The ones it didn’t were improvements we could implement as opposed to ones that could not be changed, like the size of the lot and the nearness of the neighbors.

So instead of spending nights and weekends working on projects, we spent that time cleaning our house to put up for sale. After the sale, we spent that time cleaning and packing for our move.

For about two months it was close to impossible to work on anything I didn’t absolutely have to because of the sheer mental exhaustion of just planning out everything that needed to be done before we could move. I couldn’t even get involved in my usual cooking projects because I knew that I should be packing up the kitchen for the move and it made no sense to buy a bunch of food that would need to be moved from one place to another.

Around the time we started putting the house up for sale, my consulting gig got a bit more serious. I discovered there were a bunch of required features I had been unaware of and the client wanted the project completed by the end of the year. I started working on that full time and had literally no time for anything else I wanted to work on. The third party framework has languished for months and people are beginning to ask if it will ever be completed.

Three days after Christmas we moved out of our old house and into the new one. It was an exhausting day, but we made it work. We’re still surrounded by boxes and I still have trouble finding clean underwear in the mornings, but we’ve weathered the worst of it and we’re beginning to take stock of where to go from here.

I have a few goals I would like to accomplish in the first half of 2019:

  • Make GPUImage 3 have feature parity with GPUImage 1. I feel badly about not updating the framework for so long and I want people to feel comfortable knowing the framework isn’t abandoned before integrating it into their projects.
  • Blogging. I have let all of my blogs languish because I have been too overwhelmed to think about what to write. I would like to go back to blogging about graphics and getting more comfortable with Metal in general.

It’s not a first half of 2019 goal, but I have the same goal for 2019 that I have every year: Ship an app. I have shipped books and held interesting jobs, but I have not shipped an app of my own. Technically the consulting project I am doing is an app that will ship that I essentially wrote on my own, but it’s not mine. I learned a lot from the experience of building that app and now I want to make one of my own and be my own client. I have not decided if it will be an iOS native app or a project created in Unity.

I have a few possible projects on the horizon that have not been committed to yet, so I won’t mention them here.

I know that there is something of a backlash against New Year’s resolutions. Most revolve around losing weight and going to the gym, which is hard to sustain. I think it’s nice to have a delineating beginning to a span of time where you can take stock of things and say “I don’t like how things are right now and I want to change them.”

I love my husband and I love our new home. I would not change that for the world. But right now I need a mental change. I am tired of my side projects being packing my life to move from one place to another. I miss having a thing I am making for myself that I will feel proud of. I keep worrying I will never get back to that again. I want my own life. I want my own projects. I want to look at things I have produced and feel pride that I did something this year that I couldn’t do last year.

Professionally I feel like 2018 was a wash. I didn’t accomplish anything I wanted to. I don’t feel I progressed in a meaningful way. I guess I have mostly completed an app by myself that should ship, but that doesn’t feel like progress to me. I want to learn from these experiences so that I can use my time better this year on things I care about.

I don’t think we’re going to have a wedding or a move this time around.