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.

Portable Wine Journal: Part Deux

For those following my blog, I am taking a slight detour from my audio application. I am a little burned out on trying to figure the application out. I have all the parts I need to make it work, I have just reached a mental point where I can’t “see” what I am working on and from past experience with long books and large cross-stitch projects I know sometimes it is good to put a project on hold for a little while and work on something else.

I spoke with Keith Alperin from Helium Foot Software a few days ago and he suggested that refactoring my wine app to polish it up a little bit and convert it to Core Data might be a nice project to do. He suggested showing my initial app and how I changed and improved it might be a nice portfolio piece.

Working on that app will showcase a bunch of more immediately marketable skills than the audio app. Since I am a little burned out on it currently, I hope that working on this will give my brain a reboot.

The biggest issue I need to resolve with the app is the amount of typing the user needs to do in order to store wine data. I would like to find a database or an API that connects to a catalogue of wineries or wine regions so that the user only has to type the name of the winery or the wine into the app and the rest of the information about it (color, dryness level, region, etc…) can be auto populated.

I would also like to change the layout to a collections view. I was disappointed by how unpolished the original piece of code looked and I would like to really put some thought into making the app designed well. I got a book on iOS design and I am looking for sites that have graphics I can purchase for icons and so forth.

I also need to revamp how the data is stored. I have the app set up currently in such a way that if you navigate off of a wine tasting object you can’t go back in and add more wines to your list. I plan to change the app so that you can instantiate a new wine independent of a wine tasting. For example, if you are at a nice restaurant and you have food and wine pairings you should be able to save the wine from your meal and not have it associated with a wine tasting object. After you create a wine tasting object you should be able to manually tell the app which wines are associated with that tasting.

More high-level things I would like to do is to have a map showing all of the regions your various wines come from. I think if you notice that you tend to like wines that come from a specific region you might find that information useful when looking into what wines you want to choose.

I am currently working my way through “Learning Core Data: A Hands-On Guide to Building Core Data Applications” by Tim Roadly. This book isn’t officially out yet, but I have a Safari Books Online subscription that gives me access to a “rough cut” of this book. I also have the Marcus Zarra Core Data book, but it is a little above my current learning level.

I think creating a nicely designed, polished app that utilizes an API and Core Data will be a nice portfolio piece in the way that an audio app does not. As much as I love audio, it is a difficult subject. It will be more of a life-time study for me than something that will immediately get me a job. I think learning Core Audio has made me a much better programmer, but my immediate concern is creating something that will demonstrate that I can do a job.

Any time I tell people I want to learn Core Audio I immediately get this almost panicked look in a person’ eye because they don’t’ really know how to respond to it. Sometimes they will throw out, “Well, we might need an audio app at some point in the future…” I don’t want anyone to try and make work for me using audio. I am totally happy doing anything iOS related and I think it would be prudent for me to focus more attention on my more immediately marketable skills than my interest in audio.

I have no idea what I will be doing after then end of this year beyond the fact that I am going to be coding. If I am coding for someone at a job or I am still working on my portfolio piece, I can’t say. I am not worried about it. Life is a journey. The destination is less important than the trip and so far it’s been a hell of a ride. I am looking forward to whatever comes next.

Jumping off the Boat

I have been working on implementing my app for school. I found a lot of documentation about how to code the parts of the project that I am doing. I have access to at least two people at a moment’s notice to ask questions to about my project. I theoretically have everything I need to get my project done.

I am having trouble making myself do it.

I know that the only person putting pressure on me is myself. I know that I have people who are happy to help me get through my project. I know that my deadline is a month in the future. I know I can make my project less hard if I can’t figure one part of it out.

It is still hard to work on.

I am afraid of failing.

For the last year all I have cared about was learning Core Audio. I worked my butt off trying to establish enough knowledge to be able to even approach it. When I was in Boston at the Core Audio workshop I felt exhilaration because I knew enough about what we were doing to understand everything we were talking about. I learned stuff, but I was only able to make those connections because I had a solid knowledge base with which to draw from.

I am afraid that I won’t get this done. I am afraid I will fail myself and my teachers. I am afraid I will fail my family who gave me the time and support necessary for this opportunity.

This reminds me of when I tried going scuba diving the first time. They took us out on this rickety boat over choppy waters for nearly an hour. I got into my equipment. I was ready.

They told me to jump off the boat. I couldn’t do it.

I stared at the short drop off the edge of the boat through my mask and I felt paralyzing terror. I knew that I could breathe and that I had a floatation device on that would immediately bring me back to the surface. I knew my wetsuit would keep me from being too cold. I just couldn’t jump.

I used the ladder to get into the water, but I didn’t actually go through with it. When the instructor wanted to take me under water and take my regulator out of my mouth and have me clear it I knew that I was going to choke. I was hyperventilating and I knew I would inhale sea water and have to get CPR.

There is so much to success that is completely mental. I know I am smart enough to do this project. I know I am a good developer and that I will have a great career, but doing something for the first time is terrifying. Finding the first real job is terrifying. Fearing that you will screw it up and never find another one is scary.

A lot of people, including myself, think that all we need is a shot. We have elevator speeches prepared in case we have 30 seconds with someone who supposedly can give us that shot. No one talks about what you do after you have their attention. It’s easy to think that if you could just have a chance that everything would work out. Getting that attention is the easy part. Delivering on your promise is where the work and the risk happen.

I have done everything I need to do to complete this project. I established my knowledge base. I absorbed my vocabulary. I forged connections with people who can give me advice. I have my app planned out and the design finalized.

I will not fail. I will do this. I will succeed.

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!

Oblivion

A while ago my husband and I watched the movie “Oblivion” when it came out on DVD/Streaming. We have very divergent tastes and it’s hard to find things that both of us are okay with watching.

I knew it was going to be a generic action picture that takes place in the post-apocalyptic world.

It is one of the worst movies I have ever seen.

I really can’t tell you what it was about or anything that happened because the sound design was so terrible that I feel compelled to complain about it.

The mixing was done very badly. The bass was set too high for a home theater experience. Every time something exploded our floors rattled because the subwoofer couldn’t deal with the vibrations being forced through it.

I don’t know how they did this, but there was a lot of annoying high pitched artifacts in the sound. So while the floors were rattling from the bass vibrations my ears were bleeding from these weird, inadvertent artifacts in the sound. I would be willing to bet money that the person who did the mix has hearing damage and didn’t bother to run things through a low-pass filter to make sure that anything annoying wouldn’t get through.

The absolute worst thing was the sound track. It was pretty generic, but there was something about the way it was composed that was completely horrible. There was no real melody, it was just a semi-monotonous droning. It was also in this weird pitch register where it needed to be either a lot lower or a little higher.

The soundtrack made me physically feel bad. I only got about two thirds through the movie because the sounds triggered a depressive response and I had to go to the bedroom to cry. It was a physical, emotional response to the music.

I have felt tremendous joy and other emotions to other music I have listened to. I probably spoke about this before, but when I heard Beethoven’s 5th Symphony live it was one of the most moving experiences I have had. When I heard “Skyfall” by Adele on the radio it really didn’t do anything for me, but hearing her perform it live at the Oscars it was a completely different piece of music. Something about the process of polishing and tuning the piece stripped it of its soul. Even though the live version was very badly mixed there was something in the performance that transcended the limitations.

I know most people don’t have the same sound sensitivities that I do, but seriously?? Spending hundreds of millions of dollars on a movie and not care that it sounds like shit? Paying a composer some amount of money for a horrible generic soundtrack? If the soundtrack doesn’t add anything to the movie, get rid of it. The movie would be a lot better if there was no music in the background during a tense moment than it would be with a droning, whiny repetitive melody in the background.

Watch “Star Wars”. They took a lot of care with creating a great soundtrack. They created a lot of their sound effects. The music enhances the tension of what is going on in the scene. Watch “Battlestar Galactica”. The sound was very different than what you usually see in space battle sequences. It was primarily militaristic drums with no orchestral swells. It ramps up the tension and it is genius.

I have accepted that most movies coming out are not for me because they are aimed at teenaged boys in China who do not care about the nuances of American political history. I have TV shows like “Breaking Bad” to compensate me for the loss of American cinema. But it just breaks my heart that sound is on the same pile of things like plot and dialogue that are not considered important enough to even do competently.

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.

If An Audio Framework Falls Online, Does it Still Make Sound?

About a week ago I finished my first programming book ever. I finished reading and coding the projects in “Learning Core Audio” by Chris Adamson. I wanted to get that done before this past weekend. I attended CocoaConf in Boston solely because Chris was going to be there and do a full day workshop on Core Audio. I will talk more about my experiences in another post.

One of the last chapters was about OpenAL. OpenAL is a framework that allows the user to create three-dimensional sound. One of the few links hardcoded into the book was for their site, OpenAL.org. I wanted to get the programming guide to read later, so I went to the site. It was down. I checked it a few days later, same thing.

I emailed Chris to ask him if this was a known issue. The book is a few years old, which is forever in programmer years. He wasn’t aware of it being down.

We began to look into this issue. We knew it was down and it had been for a while.

So I did some digging into OpenAL and what the hell is going on with it.

It looks like it began as an open source project. It was embraced, extended, and taken over by a company called Creative Labs back about five years ago. Their last update on OpenAL was version 2.1. OpenAL is now a proprietary technology owned by Creative Labs.

For some reason a few years ago they stopped doing any work on it and they have killed it off. They cut off all links to developers using it and stopped updating OpenAL.org. It is still owned by Creative so no one can go in and purchase the domain, but it looks very much like what happens when a large company buys a patent for something that they want to sit on to prevent anyone else from implementing it.

Correction: I have since been told that APIs are not copyrightable. Anyone is free to write their own implements of the OpenAL spec. If you want to go and make your own variation on OpenAL as Apple has you are free to do so.

My limited experience with programming frameworks and languages is that once they are abandoned they eventually go away. Apple might still have that implemented within their framework, but if the platform isn’t going forward then it might change.

Also, did slightly more digging and there is a different industry standard: FMOD.

This is not open source. It is owned by Firelight Technologies, but it is still being supported and maintained. It is multi-platform and there is a programmer API that is free to mess around with but they ask that you pay them a license fee if you plan to make money off it.

There seems to be a flourishing developer community in gaming forums, so that is one place to look if one were inclined to do 3D audio programming. I think it is just a bunch of C and C++, so you drag, drop, and include it in your project.

I don’t know if this would replace OpenAL within the Apple frameworks, but I don’t have high hopes for OpenAL. I am just very happy to know that it didn’t leave a vacuum. I was concerned that 3D audio was being abandoned totally and that would be a tragedy. I know there are a limited number of audio nerds out there in the world, but I am one of them. I aspire to accomplish some awesome stuff with audio and I am stoked to know that this possibility isn’t closed to me quite yet.