Category Archives: Core Audio

Zen and the Art of Analog Synthesizer Maintenance

2014: The Year of Magical Thinking

You can take a picture of something you see
In the future where will I be?
You can climb a ladder up to the sun
Or write a song nobody has sung
Or do something that’s never been done

Last week I was in Atlanta for CocoaConf Atlanta. That conference was the cap on one of the craziest years I have ever had.

Exactly a year ago I had dropped out of school because I was having a nervous breakdown. I knew I needed to find a programming job but I had no idea where or how I would do so. I was completely broken and I had no hope that anything would get any better. The only thing that got me through that period of my life was the faith that something would happen.

I spent a lot of my time in 2013 sowing seeds, hoping one or two of them would take root. I attended several conferences and met a lot of people. Two of the people I met were Jonathan Penn and Chris Adamson. Jonathan mentioned he was writing a book and wanted to know if I would tech review it. Being a tech reviewer is an unpaid task, but I like and respect Jonathan, as evidenced from this blog post.

The editor for Jonathan’s book is Rebecca Gulick, who also happens to be the editor of my book with Chris. When he was looking for a coauthor and he mentioned me to Rebecca, she already knew who I was.

Before I was approached about writing the book, I reached out to Brad Larson about learning OpenGL. I knew I wanted to be a graphics programmer, but that it takes a long time to learn, especially for someone like me who didn’t have any programming experience until two years earlier. My reaching out to him resulted in me having the chance to work with him on a contract project for Digital World Biology. Even though we were working on this project, I hadn’t met Brad in person.

I happened to meet Brad in person a week after I signed the contract to work on the book with Chris. I didn’t know it at the time, but the book I was working on used to be the textbook used for the iOS programming class at MATC. That definitely made an impression.

Six months ago, I had a couple of conferences that I knew I would be speaking at. I wound up doing twice as many as I thought I would. My first conference talk was less than a year ago. This year I spoke at ten conferences total.

Between writing a book, traveling all over the United States, and getting a job with one of the best programmers in the world working on robots, my head is spinning. There are so many things I thought I might get to do a few years down the road. I just wanted a job to get some experience so that maybe one day in like five years I would be able to work with someone of Brad’s caliber. I hoped that maybe I would be able to work on a book in three years.

I looked back at the goals I set for myself at the beginning of the year. No, I didn’t wind up starting a podcast or buying my MIDI wind controller (however that is on the horizon). I set out six long-term goals that I wanted to do in the next 3-5 years. I have knocked half of those off in 2014.

Depression

Oh brother I can’t, I can’t get through
I’ve been trying hard to reach you, cause I don’t know what to do
Oh brother I can’t believe it’s true
I’m so scared about the future and I wanna talk to you
Oh I wanna talk to you

I am going to be honest. I had absolutely no idea how to proceed from here. Part of being alive is to strive to go further and do better. Once you get to where you want to be, what do you do? I always feel a bit of a disappointment when I finish my cross stitching projects because I keep feeling like I will feel a sense of accomplishment, but it’s always a letdown. I enjoy the process of making the thing more than the joy of accomplishing them.

Part of my excitement about these long term projects was the anticipation of all the neat things I would get to do between then and now. I was really looking forward to all the neat stuff I would get to do and all the time I would get to spend working on my craft.

None of that happened.

Things happened so fast that I haven’t had a chance to enjoy anything I have been doing. I haven’t had a chance to stabilize the ground under my feet. I haven’t had a chance to really dig deep into something than interests me because I am running around like a chicken with my head cut off rushing to the next thing.

I have honestly been depressed. I feel like I shouldn’t be depressed and that I am a terrible and ungrateful human being because I got everything I ever wanted. Not only did I get everything I ever wanted, I got it way faster than anyone else. I have it made and I have no idea how to get up each day and deal with my life. Plus I feel like I can’t talk about it because I know that there is absolutely no reason for me to be unhappy.

I had a lot of conference talks lined up for 2015 and I was thinking about doing a lot more stuff because I feel like I worked my ass off sowing these seeds. I hoped that one or two would take root but twenty did. Last year I had nothing but my stubbornness and refusal to quit and now I have the situation of having too much. It feels wasteful to me to squander opportunities I would have killed for a year ago.

But I have to.

It has been a tremendously difficult decision, but I am not doing any conference talks for at least six months. I do not plan to attend any conferences during that time either.

I love this community. I have made so many friends in so many places. I spent a lot of my life feeling like a freak who never fit in anywhere. Being welcomed into this community and treated with respect has meant more to me than I can ever express. One reason it took me so long to make this decision is because this community means so much to me and I want to make sure other people like myself have a chance to join and be welcomed as well. The Klein family has changed my life and I can never express to them what their kindness has meant to me.

I feel like my life is moving too fast and I need to take a step back. I need to focus on getting my feet back under me. I need to focus on doing my job well. I need to focus on sharpening my tools. I need to find something that gives me back the joy and meaning I had in my life back when I was struggling to break through.

The Zen of Sound

Are you lost or incomplete?
Do you feel like a puzzle, you can’t find your missing piece?
Tell me how do you feel?
Well, I feel like they’re talking in a language I don’t speak
And they’re talking it to me

Last year I felt like I had to spread a wide net to catch one opportunity. I spread myself very thin doing a lot of different things to try and get myself enough exposure to find a job. I am pulling back on a lot of these things.

Looking back at my long-term goals, the half that were not fulfilled all had to do with audio programming. I love sound. I wanted to be a sound designer before I became a programmer. Last year I wanted to write a synthesizer app as a portfolio project, but I had too much noise in my life that I couldn’t focus the way I needed to for this project.

Now that I can pull back on a lot of the things that are taking up my time, I can focus my free time on projects that personally interest me without worrying if they will get me a job.

I spoke to Brad when I began to feel overwhelmed about what I should focus on for the next year or so. He advised me to think of something that doesn’t exist and to try and make it happen. He talked to me about taking an impossible task and breaking it down into small, discreet parts that can each be accomplished individually.

Audio affords me a lot of opportunities to explore things that interest me. I became interested in electronics after I began working with physical hardware at my job. I also became interested in math after I started working with GLSL. Additionally, Apple introduced not only Swift, but AVAudioEngine. There have been audio programmers on Twitter who do not think you can do audio programming in Swift because Swift is not built on C.

When I tried to tackle this last year, I had no idea what I was getting into. I also placed a lot of chips on me being able to pull this thing off that caused me a tremendous amount of anxiety.

I am not going to make that mistake again.

I know it isn’t necessary, but I want to build a physical synthesizer before I tackle a software one. I want to get a feel for how all of the pieces fit together.

I also want to spend more time making music with my tools. You can’t really create a piece of software for a group of people if you don’t understand how they are going to use it. I used to play around with this stuff all the time years ago, but it’s been too painful to work with until recently.

I am not going to disappear. I am going to catalog my journey here on my blog. I hope that I can figure out how to do some things that will be helpful to the community at large. I plan to take everything I am learning over this time and present it at NSScotland, which I am still going to speak at. I could not let down Alan Francis again.

I hope that anyone reading this can understand and respect my decision. I hope that I am not the only person who has felt this way and that reading about my depression can help someone else. I am in this career for the long haul. 2014 was a sprint. The journey is a marathon. I can’t keep going the way I am because I won’t make it to the end. I am going to miss all of the amazing people I have met over the last year, but I need to take care of myself and focus.

Thank you everyone for an unbelievable 2014. I am looking forward to coming out of my self-imposed isolation a happier and healthier person. God bless and keep all of you. Don’t have too much fun without me.

Culmination of a Dream

Two years ago, I didn’t know Chris Adamson existed. I was taking my first semester of the iOS development degree at Madison College when I first found out about him. I was taking the Objective-C class mostly because I needed to have a full load in order to continue to collect unemployment benefits. I was planning to follow the Java track, get a job for a health insurance company, and lead a normal mundane existence. That all changed when I heard two words that would change the course of my life: Core Audio.

In my previous life, I went to school for audio engineering. I learned Pro Tools and Logic. One of my teachers was talking about the extreme guys who programmed those pieces of software and they fascinated me. I had no idea how anyone would program a digital audio workstation, so I kind of forgot about it.

When my teacher Eric Knapp mentioned Core Audio, he said it was one of the hardest things to learn in the Apple development environment. It was a toss-up between Core Audio and OpenGL. Me being the good little masochist that I am, I decided I would learn both of them. (Having tried my hand at both of them, I am awarding Core Audio with the trophy for being harder to learn.)

Trying to read "Learning Core Audio" while cruising and enjoying the ocean.

Trying to read “Learning Core Audio” while cruising and enjoying the ocean.

I bought Chris’s book on Core Audio and made the incredibly stupid decision to take it on vacation with me for beach reading. After seeing the unfamiliar and deprecated “NSPool” object, I freaked out and realized I had to work a lot harder in order to learn enough to understand what the hell is going on.

In February 2013 Eric told me that Chris would be speaking at a conference in Chicago. The conference was in two weeks. I was a poor, unemployed college student, so I had to scrape together enough money to be able to go down and attend this conference so that I could meet Chris.

I saw him around the conference, but he was a big important author and I didn’t really know what to say, so I didn’t approach him. On the last day of the conference, Chris did a talk on audio on iOS. I sat in one of the front rows and peppered him with a lot of impertinent questions about audio programming on non-iOS platforms. Having been on the receiving end of questions like this in my own talks, I commend Chris for his patience and restraint at not shoving my Ravenclaw scarf down my throat.

Kyubey and I grokking AV Foundation video.

Kyubey and I grokking AV Foundation video.

We wound up talking after his talk and having lunch together. He was one of the first people I have encountered that I felt completely in synch talking to. I wore a Doctor Who shirt trying to bait someone into talking to me about it. Chris saw it and commented that he would ask about it, but everyone and their brother was into Doctor Who. I pulled out my phone and showed him a picture of my pug, Delia Derbyshire. When I said her name, his face lit up and he got really excited. He was the first person I met who knew who Delia was without me having to explain it. Eric asked who Delia was and we were talking over one another explaining who she was. I was so happy. I was grateful to him for hanging out with me and talking about my stupid geeky audio stuff.

Several months later I got to attend CocoaConf Boston and spend a whole day with Chris doing Core Audio. That day was one of the best days of my life. I was having a lot of problems at that point in time and I felt like my life was falling apart. Spending the summer working through the Core Audio book knowing I would get to do this workshop in the fall gave me focus when I needed something to get me through my life.

Chris giving his penultimate Core Audio workshop at CocoaConf Boston 2013.

Chris giving his penultimate Core Audio workshop at CocoaConf Boston 2013.

Chris and I were able to work our way through our initial awkwardness due to both of us having some social anxiety issues to become friends. I stopped worrying that I was bothering him by commenting on his tweets and I began to feel comfortable asking him for advice.

Earlier this year I was again trying to figure out what I was doing with my life. I had a contract job that was ending in a few weeks and I had to figure out what I wanted to do. I applied for a QA position at a company in town whose employees I knew and liked a lot. Something in my gut told me that I didn’t want to do this job. I knew I needed a steady paycheck, but I just had a gut feeling that I wasn’t supposed to take this job.

I went to Chris and explained my situation. He patiently read through my long rambling email and responded back, “I should tell you to take the stable job with the decent paycheck and the nice coworkers, but I have an ulterior motive. I need a coauthor for my book and I would need you to start after your contract is over.” I immediately wrote back to the company and told them I was no longer available.

Like all recovering journalism and English majors, I always wanted to be a writer. I wanted to write books and stories. I have absolutely no idea why I wanted to be a writer. I don’t remember if I actually liked writing or I just liked the idea of being a writer. I sort of gave up on the idea of being a writer in high school when I realized everything I wrote was crap. I realized if I wanted to be a writer I needed to have some actual experiences. I had to get out of my comfort zone and change my perspective of the world. Sometime in college I just sort of decided not to think about writing for a decade to give myself a chance to actually find something to write about.

The Boston Breakpoints

The Boston Breakpoints

I began writing again last year around the same time I met Chris. I had another developer recommend starting a blog and I have written at least one blog post a month since I started my blog. I know a lot of people do podcasts because they are “easier”, but I have always found that writing really helps me get my thoughts out of my head.

Back in March at CocoaConf Daniel Steinberg had a session called “Book Chat.” It was for anyone who had written or wanted to write a book. The only other person there besides Daniel and I was Chris. Many people over the last year have tried to talk me out of writing a book. I heard the usual arguments that books take a long time and they don’t generate any money. Daniel asked me what I wanted to get out of a book. I told him I wanted to be able to type my name into Amazon and have a result pop up. I also wanted to take the cover of my book, frame it, and put it on my wall. That was all.

Today marks the culmination of a dream for me. I have a book I wrote being published. We are on a public beta and there is still more work for me to do on the book. But it is real. It is happening.

OMG! I got a shout-out in Chris's "Stupid Video Tricks" talk in Chicago!

OMG! I got a shout-out in Chris’s “Stupid Video Tricks” talk in Chicago!

I am thinking about where I was a year ago. I had weathered several failures and I felt broken. I had no idea what the following year would bring. I had the single-minded determination that I had to finish the Core Audio book and go to Boston. I didn’t know how or why, but I knew that it was a turning point in my life and I threw everything I had at that.

Going to Boston changed my life. It changed my perspective of who I could be. I was pitched by several companies there that I didn’t imagine would even be interested in me. None of those leads worked out because I was just too messed up to take advantage of them, but they made me realize what kind of person I could be if I wanted to. Josh Smith had me talk to Dave Klein about speaking in Chicago this year. I didn’t think I could be a speaker until that happened. I applied for another talk that happened a few weeks before CocoaConf Chicago, which wound up being my first tech talk, but that would never have happened without Josh Smith.

Mad props to Mark D for throwing Greek and trombone playing at us at 8:00 in the morning.

Mad props to Mark D for throwing Greek and trombone playing at us at 8:00 in the morning.

I love this community. I love that I came here from a really crappy background and that I found people who were willing to accept me for who I am. I am happy that I haven’t been discarded because I am damaged. My damage could even be considered an asset because I bring uniqueness and experience with it.

All of these people keep talking about the importance of teaching young girls to code, like somehow my generation of women is too old to learn new things and we are a lost cause. Meeting someone like Chris whose experience was so like my own and knowing that I could have another chance at life gave me hope, which gave me the tenacity to endure all of my various disappointments. He gave me strength to accept all the broken, dirty pieces of myself and accept that they are part of who I am. He woke me up and made me think about all the parts of myself that I had numbed because they were too painful to deal with.

I went from a world of “No” to a world where anything is possible with enough work and tenacity. These last two years has been a miracle.

“iOS 8 SDK Development” is my first book. I hope there will be many more where this one came from. I treasure this book because it represents something I didn’t think I would ever have. It is also a project I got to work on with a great friend whose presence has enriched my life.

I wish I could go back two years and tell the earlier me that I would meet these people who would change my life. But I can’t. Spoilers, sweetie.

For the Love of Math

I want to ask everyone a question. Am I the only one who remembers that at one time they really loved math?

I didn’t always love math, or reading. I found both of them rather difficult my first few years of school. I had classmates who went to preschool or had older siblings or stay at home moms who had a small head start on me for reading. I was determined to learn to read and I quickly caught up and surpassed many of my classmates.

Square One Television

Square One Television

It wasn’t until second grade that I discovered my love of math. There used to be an educational program on PBS called Square One Television. I became obsessed with this show because it took all these arithmetic concepts I had trouble grokking and explained them in a way I could understand.

They also talked about such advanced topics as Cryptography and Tesselations. (I do want to apologize for the dated content, this was created in the 1980’s.)

This show taught me what a googol was before the spelling changed and became a search engine/Big Brother. Even today when I see a number that is the same backwards and forwards I get really excited because I know it is a palindrome.

Yes, that is James Earl Jones.

Yes, that is James Earl Jones.

Notable people like James Earl Jones and Weird Al Yankovic appeared and lent their talents to making math fun for kids. If you do watch any of the clips I have linked to, please to watch the Weird Al one, it is full of Monty Python homages.

So, if I loved learning math so much and I enjoyed being challenged, why did I major in journalism rather than something math related?

My first major in college was engineering. I was bullied a lot in high school and I had a year where the highest grade I got on my report card was a C. As such, I wasn’t accepted to any of the schools I really wanted to go to. I went to the University of Wisconsin-Platteville to major in engineering. The male to female ratio at the time was two to one. After attending a tech conference where the male to female ratio was fifty to one, that seems positively progressive, but at the time, it was a bit of a shock.

I did not fit in with my classmates.

Every class I had I was the only girl. No one would sit next to me. I had a circumference of empty seats around me. If I tried to talk to anyone, they would literally cry and run away.

I took calculus my freshman year and due to a lot of stress and social issues, I received a D. I don’t really remember anything we were supposed to learn after the first week.

Contrariwise, if it was so it might be, and if it were so, it would be, but as it isn't, it ain't. That's logic.

Contrariwise, if it was so it might be, and if it were so, it would be, but as it isn’t, it ain’t. That’s logic.

I felt like a failure. The thing that got me through high school was this mythological idea that I would go off to college and find my people who would love and accept me for who I was. Going and discovering that things were even worse there than they were in high school was a massive shock and disappointment.

I temporarily dropped out of college. I tried working at Border’s for a while, but that went badly, so with nothing else to do, I went back to school. I went to Madison Area Technical college to take some entry level classes to get my grades back up enough to get back into the UW system. I transferred to UW-Whitewater, where I graduated in 2006.

Trying to jump over the negatives to get to the positives.

Trying to jump over the negatives to get to the positives.

I bounced around majors a lot, but I knew for a fact I was not going to do anything math related. I thought I was too stupid to learn calculus. I thought my success with algebra and trigonometry was a fluke, that those things were useless anyway, and that I needed to pick something easy just so that I could get through college because I was told that having a degree in anything would get me a job. *insert hysterical and bitter laugher here*

Journalism didn’t work out. Neither did video editing, sound design, or doing commodity white collar work. Back in 2012 I felt beaten. I had no idea what to do with my life and I contemplated ending it.

Then a miracle happened in a place I did not expect.

I have spoken about how the worst job I had was one where I was told to pretend to do work. I wasn’t allowed to ask any questions and I was supposed to act like I knew a bunch of stuff I had no way of knowing. It was miserable. However, there was a silver lining.

While trying to find something to do that looked like work, I discovered Codecademy. Codecademy began at the beginning of 2012 with the promise that you could learn to code in a year. I had it on my radar, but I was too discouraged from trying to learn programming to give it a try. When I had to find something that looked like work, it fit the bill.

I discovered that all the things that had stymied me for years while I was learning to program all of a sudden went away when I was doing things over and over again and doing them for long, concentrated pieces of time. I could do something I gave up on ever being able to do. I felt joy, and more importantly, peace while I was sitting at my computer feeling the code flow through my hands and onto my screen.

When that job ended I made the radical decision to go back to school full time rather than find another job. I was tired of running. I was tired of feeling stupid. I was tired of being afraid of failing. I wanted to learn to code because I wanted to know I could do it.

The two biggest motivators for me learning to program were Core Audio and OpenGL. I studied 3D modeling and animation along with audio engineering. I wanted to understand how the programs I used worked. I learned all the low level stuff I could find to help me with this quest.

Then I hit a wall.

What on earth does this stuff mean?! Mark Dalrymple knows Greek, right??

What on earth does this stuff mean?! Mark Dalrymple knows Greek, right??

I wanted to program and audio synthesizer. I was lent some Digital Signal Processing books by a friend, but when I look through them, it’s all Greek to me. And yes, I literally mean Greek because there are all kinds of symbols that I remember somewhere in the back of my head writing out and drawing in notebooks back half my life ago that I had buried because the memory of them was too painful.

I am in between conference gigs right now. Got home from CocoaConf Columbus and immediately went to That Conference.

It has been something of a whirlwind and I am still processing a lot of the adventures I had on these trips.

One of the talks that I was most looking forward to was at talk on the Accelerate framework by Mattt Thompson. I really wanted to know more about it, but I walked away disappointed. Mattt said that you couldn’t really utilize the framework unless you understood the math behind it. My talk on GPU programming also had the caveat that you have to understand math in order to fully utilize shaders. I went to no fewer than three talks and one keynote talking about math and our lack of knowledge of it.

I want to do something about it.

My favorite book in seventh grade and my introduction to logic.

My favorite book in seventh grade and my introduction to logic.

I asked the Klein family if I could replace my poorly attended Debugging talk with a talk on math. I want to figure out the most common stumbling blocks people have with the various frameworks and try to explain math to people the way it was explained to me, in a fun and relevant manner so that it doesn’t seem so forbidding and scary.

I am slowly going back and trying to immerse myself in the math that fascinated me as a teenager. I am not doing this because I think it will get me a job somewhere, I am doing this because I miss how I used to feel when I got exposed to something amazing. There are so many secrets and wonders of the universe that are a mystery to me because I shut off a part of me that I couldn’t bear to look at any more. I am sick of being that person. I don’t want to be afraid anymore. I want my love of math back.

Tech Talks Prep

I have been very fortunate to have two tech talks accepted for the beginning of this year: Snow*Mobile 2014 and CocoaConf Chicago.

Snow*Mobile was the first programming conference I ever attended. I was able to attend by being a student volunteer. My job was to hand out the name badges to the attendees. Having that job made a huge difference to me because I got to meet everyone who came and since I was working with the conference I had some built-in recognition from the conference goers.

The talk I am doing for Snow*Mobile is about sound design and user experience in mobile applications. The talk I am doing for CocoaConf is on AV Foundation audio.

If someone told me that I would be speaking at the next Snow*Mobile after I attended the first one I would have laughed at them. I didn’t think it was possible that I would be able to be a conference speaker at this point in my career.

I know that I am being given this opportunity by the Remsiks and the Kleins. At CocoaConf especially they tend to only invite experts and people who have written books.

I am putting a great deal of pressure on myself to not let down people who are giving me opportunities.

Snow*Mobile is a month from now and CocoaConf is two weeks after that.

I am juggling a lot of things right now. I have been at my job for a month and I love my job. However, due to the nature of the beast, I do not have a lot of free time or mental energy to take on new tasks.

I decided to dedicate this whole weekend to getting some portion of these talks done. I do not intent to leave them until the last minute. I want to give myself some time where I can change course if something I am doing is not working.

So far this weekend I have completely rethought both of my talks. I realized that the UX talk was misguided because I was thinking of it from the perspective of film. I realized all of my examples were from things that are vastly different than what I as a user am looking for in an app.

I feel better about this talk now that I have a better grasp on what I would like to say that would be useful to people attending the conference.

I had a similar revelation with my CocoaConf talk. I started getting overwhelmed by the amount of information I felt I needed to present. While I was doing research I found a focal point for my talk. I know that I can speak reasonably about the amount of information I am going to present and I will be able to give a solid, yet entertaining talk on my topic.

I am also lucky in that I have access to people who know more than I do who are willing to help me and answer my questions.

I think at this point I have maxed out the number of things I can effectively manage without dropping anything. I am gambling somewhat because I am counting on nothing disastrous happening to me in the next month and a half. This is one reason I am trying to knock these things out now on the off chance that something unforeseen happens.

My Goals for 2014

I am at a little bit of a crossroads with my blog. When I began this blog last year I wanted to use it to catalog my journey from being a student to being a professional developer. I thought it might help me get a job or provide visibility or something. My goal for 2013 was to learn enough programming to get a job, preferably in iOS development.

I accomplished that goal.

I have been now struggling to figure out where my blog fits into my current situation. I was planning to write about some of the struggles of having a first job, but after speaking to several people I have realized that this is a terrible idea. I love my job. I believe in my company and I am super happy to be here but I don’t think it is wise to write about that experience.

So what do I do? Do I just stop writing my blog? I can’t really talk about personal experiences because the vast majority of my personal interactions are with coworkers and that violates the rule I set up above.

After doing some soul searching and thinking about this a lot, I have decided that I am going to continue this blog in the spirit that I created it.

One thing that has gotten me down recently is this idea that I accomplished what I set out to do. It’s great that I reached that goal, but I also feel a little empty, like now what do I do? I know I have challenges to meet at my job, but it just doesn’t feel the same as when I had this journey I was on to get from where I was to where I want to be.

I think if I don’t keep pushing myself I will get complacent and let my skills atrophy. I want to keep giving myself goals to reach. I want to keep finding new things to learn to push myself to do more than I could last week, last month, last year.

So here is how I intend to proceed with my blog:

Each year I will come up with goals I want to reach. Some of these goals might be long-term, taking five years to reach. Others will be short-term, to be reached by the end of the year.

I will spend time writing about my progress with these goals. I can at least come here once a month to say, “I had too many deadlines and I was too busy to get anything done. Boo. I need to manage my time better.”

Apparently more people read my blog than I think actually read it, so I figure if I don’t keep working on my goals someone on App.net will give me crap about it.

Short-Term Goals for 2014:

  • Get familiar with GPUImage to the point that I can do a project.
  • Finish at least one of the audio programming/math books I got for Christmas.
  • Buy a MIDI wind controller and record at least one song utilizing a sound I designed.
  • Start a good podcast that isn’t just two white guys talking about Apple.

Long-Term Goals

  • Become a master audio programmer.
  • Write a complete synthesizer app.
  • Fully understand the math associated with audio synthesis.
  • Write a programming book.
  • Speak at a conference in another country.
  • Speak at 10 conferences in a year.

Both the short and long term goals will probably get larger over time.

So, challenge for 2014 is to figure out how to manage my time to allow me to get these things done. I am counting on people to hassle me about my goals if I don’t update very often.

I picked the name Red Queen Coder because she had to run as fast as she could just to stay in one place. I finally ran fast enough to get to the place I want to stay. That doesn’t mean that I can take a break and stop running.

Ready? Set? GO!

Why I am Not an Audio Engineer

Earlier today articles about this job posting started making the rounds on Twitter and App.net.

I am an entry-level programmer. I have spent a lot of time navigating my way through a lot of postings like this.

I like to call any entertainment fields (movies, music, games…) “prestige” industries. 99% of the people working in these industries make very little money. There is a lot of turn over because people tend to get used up and burned out by these kinds of jobs. If you survive the first few years you can sometimes work your way slightly higher up the food chain.

If you are up against 50 other qualified people for a job, there is absolutely no negotiating power there whatsoever. If you quit or get hit by a truck there are 49 people ready to replace you.

I first encountered this in journalism.

I was out on a story talking about an adult apprenticeship program to help lower-income people learn how to budget and finish their GED. Their keynote speaker was an alderman who was talking about the importance of education. He told this group that if they dropped out of high school their average salary would be only twenty thousand dollars a year! Just twenty thousand dollars a year.

The photojournalist, who had a bachelor’s degree in business and three years of experience, leaned over and whispered into my ear, “Shit, I only make nineteen grand a year.”

At that point in time I was attending school for audio engineering as well as video production. My favorite teacher at the school discovered a metal band whose first album he engineered and managed to get them signed to a major label.

I came up to him one day and asked him why he gave that up to teach. The dream of everyone in the audio engineering school was to do what this guy did and he gave it up. Why??

He looked me in the eye and said, “I got tired of coming to work and having people lay their guns on my recording console. I also got tired of watching my paycheck go up the studio owner’s nose.”

Another day a student asked him what it was like traveling with this metal band he worked with. He told us a story that haunts me to this day.

He said one night after a concert the band had a bunch of groupies and roadies hanging out drinking. Each member of the band had a roadie to haul their stuff around. The band members started playing a game I like to call, “My roadie is the most extreme.”

One of the girls threw up on the floor and a band member said, “My roadie is the most extreme. My roadie will eat that girl’s puke.” The roadie went over and ate the puke.

The drummer, not to be outdone, said, “Well, my roadie is the most extreme. He will eat my shit.” He dropped his pants and I do not feel the need to finish the rest of the story.

These guys were probably making ten bucks an hour for the privilege of being physically hazed and abused by this band. Their friends were probably envious of this glamorous life these guys were leading.

It is very difficult to describe what it is like being in a situation where things get out of hand. When people complain that a woman who was raped could have just walked away they do not understand the weird alternate reality you get into where you feel like you can’t walk away from an abusive situation. This does not just happen with women. It happens in situations where there is an extreme power imbalance, such as this incident.

The thought of being trapped in a job like this scares the living crap out of me. I am sure there are good places to work with audio engineering, but I prefer to try my luck somewhere that I have a better chance at having a modicum of value as a human being. I want to know how to do something that would be difficult and expensive to find a replacement for.

I will not work for a bully. Giving into bullying never gets you anywhere. It just lets the bully know that they haven’t reached the line they can’t cross yet.

I love audio, but I love my health, happiness, and physical well being more. People should not be treated this way.

Delia Derbyshire

Anyone who talks to me knows that I am obsessed with Delia Derbyshire. She was the recording engineer who recorded the original “Doctor Who” theme. The “Doctor Who” theme is a landmark piece of electronic music. The amount of work that went into designing the sound in that theme was tremendous. Derbyshire was a genius and was able to push that medium in a way that most people would not have had the tenacity and genius to accomplish.

Delia Derbyshire

Delia Derbyshire in 1965.

During her life she never got credit for the work she did on that piece of music.

The composer, Ron Grainer, wanted to give her credit for the work she did on the piece. He wanted her to be credited as a co-composer for bringing the piece to life. The leader of the Radiophonic Workshop (whose name I can’t presently locate) refused to allow Delia to be credited for her work. He said that the group was a collective and that no one person should be singled out for their contributions.

Over the years Delia has been given credit for the work she did. The first time I heard her name was in the documentary “The Alchemists of Sound.” If you look on the Wikipedia page for the theme Delia is given credit for her creation. Her name is very closely associated with the theme online. Her works have been rediscovered and some day we may be able to hear what she worked on later in her life. Sadly she passed away in 2001 so she never got to see the renewed interest in the work that she did.

However, she was never named in the “Doctor Who” credits for her work. The credits were always “Ron Grainer and the BBC Radiophonic Workshop.”

Until today.

Today was the 50th anniversary of the first airing of “Doctor Who”. The show opened with the original theme from 1963. In the end credits Delia Derbyshire is named and given credit for the work she did.

I can’t express how happy it made me to see her name in the credits. There are women in history who get posthumous credit from history for the work they did, like Rosalind Franklin getting credit for the contributions she gave towards the discovery of the double helix. That is great that she and others have gotten recognition from the online community for the work they did, but it really makes me happy that the BBC was able to just once put Delia Derbyshire’s name in the credits where it should have been fifty years ago. This is a time to remember the people who made “Doctor Who” what it is and the fact that they did that was incredibly awesome.

I Don’t Want to Bother You, But…

I am currently working on trying to figure out AV Foundation. AV Foundation, very much like the rest of Core Audio, is not very well documented. It has been broadened and expanded the last few years and a lot of the material out there in the world is from 2 years ago, which is a century in Apple development time.

I feel unsure about how I am proceeding with this. I go into the Apple documentation and see that there is a programming guide! Cool! This will be easy.

Then I look online and I see developers talking about how the guide is really out of date.

I ask a developer what to do. His answer: Watch the WWDC videos and visit the developer forum.

I get ready to do that and I notice that the guide was just updated less than two weeks ago. Great! That means it is up-to-date and comprehensive, right? Not necessarily. Watch the WWDC videos and visit the developer forum.

I don’t want to bother anyone. I feel bad that I am asking things that keep getting the same answer and I worry that people think I am dumb or I am not listening to what they are saying. I don’t want to be a time suck to people who are high level developers who need time to actually do work.

I don’t know if this is just a stage everyone who is interested in audio programming goes through, where you think, “There has to be more than just this.” Yes, somehow people who are experts on this stuff don’t know that there is some super secret easy guide to doing these things that I am going to magically find because I am a special unique snowflake who doesn’t have to deal with the same issues as everyone else :p

I really want to be a self reliant person who can look things up and figure things out. I keep hearing from two different camps of people. One camp says never to ask any questions because it will make you look stupid. The other camp says that asking questions is a good thing to do.

Earlier in the year I could not get a VM working on my computer. I took it to my teacher. He tried one or two things for a little less than a minute then immediately got up and started asking the teachers around him about whether they encountered that error before and how they would fix it. Five minutes later we resolved the issue and it was working.

I think it is good to ask questions, but I get wary when I notice that I am getting the same answer to a lot of the questions I am asking. I hope that if I can show that I listened to what I am being told and can follow through with it that hopefully my earlier obtuseness will be forgiven. Apple development is a small community of people and audio development on the Apple platform is an even smaller community of people and I don’t want to be known as the person who can’t figure things out.

Okay. Existential crisis over. Time to get to work!

AVFoundation

I began work on my Core Audio app yesterday. I had a whirlwind of activity the last week or so and yesterday was my first day to really sit down and work on my app.

One of the things that was invaluable to me to learn was how to translate a command-line application to an iOS application. Instead of creating a user data struct, you take those parameters and set them as properties. The methods then get placed in the View Controller instead of the main method.

With those vital pieces of information and a lot of sample code, I figured I was off. I knew I needed to figure out how to set up the recorder, so I looked at examples of how to do this. I had an example for audio queues and audio units.

Things turned out to be more difficult than I anticipated.

There was a lot of code that was either hard-coded for the command line or looked for parameters that were not going to be available on an iOS device.

I spent a few hours trying to cram a square peg into a round hole. It was a little frustrating and I started to feel discouraged. My “glow” from the conference was starting to wear off and I began to realize why every talks about how incredibly hard this stuff is.

I decided to attempt another approach. I knew that AVFoundation was created a while back to make things easier for people who want to do relatively simple things. I wanted the recording process to be easy because I don’t plan to do any processing with it until playback.

I found a tutorial on AVFoundation.

I spent the rest of the day working though this tutorial. This was some of the best time I spent on this project.

AVFoundation was designed to work with an iOS device. It was the right tool to use for the recorder. I could have spent a week wrestling with trying to make a different framework behave the way I wanted to. At that point I probably would have asked the Core Audio mailing list or Stack Overflow and everyone would have been like, “Dude. Just use AVFoundation.”

I think it is always worthwhile to explore the simplest way of accomplishing a task. It was possible that the tutorial would not have helped me find a solution, but I think that dedicating a few hours to looking down a path that might work is a wise way to proceed with something you have not done before.

I did not do any work on my app today. I had class this afternoon. I find it difficult to focus on learning something new if I know I am going to leave in a few hours. Instead I spent my time this morning doing a multithreading tutorial.

During class this week we talked about Core Data. I also saw a talk at CocoaConf Boston about Core Data that made me feel like a complete idiot. So I looked at Safari Books Online and I found a rough cut of “Learning Core Data for iOS” by Tim Roadley. It is a whole book about Core Data where you work through a large and complex program that showcases the capabilities of Core Data.

Core Data is hard, but having a large tutorial where I can read about something, type out code, and not have to make any of my own intuitive leaps is about as much as I can do on days I have to leave the house.

I am hoping to improve my toolbox to learn how to do hard stuff. I also want to figure out if Core Data is a good way to store and process audio data.

I have created a more realistic timeline of when I hope to finish my app. I am going to take the next two months to work on it. I am going to spend that time polishing my skills with debugging tools, instruments, version control…

Goal for the end of the year is to have a nice app to show prospective employers.

Further updates tomorrow!

Learning Core Audio

CocoaConf Boston

I went to CocoaConf Boston this past weekend. I feel very fortunate to have been able to attend this event. I won a ticket to the conference and I had a lot of help just being able to get there.

This was a life-changing weekend for me. I spent a day doing the Core Audio workshop with Chris Adamson. This workshop was one of the first times that I got into the flow with programming.

Don’t get me wrong. I really like to code. I have just noticed over the last few years that I wasn’t getting the same “high” I was getting when I understood concepts before. I would spend a while debugging a huge project and when I got it debugged and working I never felt like “Yes! I got it to work! I am amazing!” I always just felt like, “Okay, that’s done. On to the next thing.” While the project isn’t working I feel miserable and unhappy because I didn’t get it perfect yet. I started to feel like a masochist because I was going through all the pain but never got the emotional payoff at the end.

This past weekend was different. When I grasped concepts with Core Audio that I hadn’t known before I felt my mind expand. The sky opened and the rapture came. I was so high off of learning this code that I could not sleep for almost a week. I was completely wired.

I want to briefly explain my interest in Core Audio. One of my self-appointed titles is “High Priestess of Audio Programming.” I am not saying that because I think that I know more than most experts on the topic. Far from it. I am a beginner and I have a lot to learn.

I love sound. I want to fully understand it and get as close to merging with it as I possibly can. The best analogy I can come up with is that for me learning audio programming is like a hard core Christian learning Aramaic so that they can read the Bible in the original language. They want to get the direct words and meanings without being passed through the filter of a translator who might have their own agenda.

I know giving myself that title is probably flaky and arrogant. I will probably have to drop it at some point in the near future but I would love it if I can keep it with people knowing the reason behind it.

I was exposed to a lot of ideas this past weekend. I was exposed to the idea of writing a book and speaking at conferences. I got distracted by a lot of shiny objects and I got seduced by the idea that I am where I will probably be in a few years, but I am not there quite yet.

My goal is to be a hard-core, bit eating programmer. I want to master the hardest things I can find. I want to get as close to the metal as I can. I want to be the person who writes a language or a framework that everyone uses. I want to be Linus Torvalds or Ada Lovelace. I do not want to be the token female programmer who got hired for diversity reasons.

Woman Programmers vs Women Who Code

I may or may not have complained about this already (probably have), but I am annoyed by the recent women’s programming outreach programs. I like the idea in theory, but all of them are along the lines of, “Here! We can teach you Ruby in three weeks and you are now a programmer! Yay!”

You can’t master programming in three weeks. Sorry, but no. I don’t like things where you type in one line of code then lots of magical voodoo happens. I love C for heaven’s sake! I want to learn some Assembler and kernel programming. I want to learn more Linux and shell scripting and regular expressions. At some point in the future I want to learn the math that is being done by my computer for DSP so that I can understand the language of sound.

I wish that these programs would focus on longer-term goals. I wish that they would tell women, “Hey, this stuff is hard. Take 2-3 years and really focus on understanding difficult concepts.” Support them when they think they aren’t good enough because they don’t understand something the first time. No one does. I usually have to expose myself to something about three times before I begin to process it. I can seriously feel my brain rewiring when I am learning a new skill. It takes time. Throwing someone into a week-long workshop to train them to be a code monkey doesn’t count.

My First Real App

That being said, I am laying out my plans for my app. I know that it is one thing to say I want to be a hard-core programming geek, it is another to actually be one.

I want to make a synthesizer. I want to program custom audio units and put together a huge, complex graph of audio effects. I am not there yet!

I am trying to come up with a project that will take about two months to complete that is impressive enough to get me my first job. I need to make the scope small enough that I can get it done in a reasonable amount of time but also impressive enough to capture someone’s attention.

My plan is to make an app that is a sound recorder. When the user pushes the record button a modal view pops up that has a user interface that shows audio level metering and the amount of time being recorded. If you look at Logic, when you begin recording there is a green bar that shows the amount of time being recorded. I want it to look like that. This user interface is the most difficult part of my project and it will be done last.

After the user records their voice and dismisses the modal view they will be able to play their voice back with some effects. I have two sliders, one that controls pitch and one that controls speed. I also have three buttons that will be mapped to various audio unit effects. I am thinking about having a distortion unit, a reverb unit, and I need to determine the last one. I am going to look through the audio unit properties header file for something that looks like it will fit into the rest of the project.

I started getting all confused and turned around. Where do I start? How do I store my data? How do I make my user interface? There is a level meter parameter in Audio Queues, how do I map that to an animation? Do I need to learn Core Animation?

I spoke to my teacher Eric Knapp. He was imminently practical. He told me to start at the beginning. Make an app that records a sound. The next step is to play it back. Then go from there. When he puts it that way…

Systems, apps, and games need to start simple and then get more complex. You need to make sure that the simple things work first and then you add complexity. You can’t immediately set out to create a complex system or else it will fail.

Finally, after I get everything coded I want to try to design the user interface. I have a degree in video production and graphic design. I have not used these skills in a very long time because I honestly don’t want to be a designer as a living. I am a fairly sensitive person and when you are doing something creative you will deal with rejection a lot. I don’t love design enough to persevere through the vast amounts of rejection my work will probably receive. I know that design is a matter of taste and that if someone doesn’t like my work it doesn’t necessarily indicate that I am bad at what I do.

I do know enough about design that I can hopefully make my project look like I didn’t ship it with developer art.

I will keep updating my progress on this application. My biggest enemy is lack of focus. I keep hearing from a lot of different places that whatever I happen to be working on at any given point is wrong. I start worrying about hedging my bets and learning a few “safety skills” in case this whole iOS thing does not work out.

I can’t do that anymore. I have to put all of my effort behind one thing and have faith that it will work out. Doing a few things badly is worse than doing one thing really well.

Moving forward. Not looking back.