Ebook Annoyances

I have a confession to make: I am addicted to books. I am not addicted to reading books, I am addicted to buying and accumulating them.

I have far more books than I am ever going to read in my lifetime, but I like the feeling I get when I feel like if I wanted to know how to do something I could just do it. I am fascinated by animation and I have over a dozen books on HTML 5 animation. I like to think I will get around to reading them one day.

This is a "stack trace" of one of my multitudes of stacks of programming books.

This is a “stack trace” of one of my multitudes of stacks of programming books.

In order to avoid the massive piles I have stacked all over my house, I discovered ebooks. Ebooks are awesome. They just take up a little space on your hard drive, you can put them on multiple devices, and you can take them with you on trips without having to pack an extra suitcase. They also have the added benefit that if I decide I want to buy a book, I click a button and it appears on my computer like magic.

I have been primarily getting my books from InformIT. They are part of Safari Books Online and they sell the ebook version a few series that I am addicted to, primarily the “Learning , A Hand’s On Guide to Learning .” They have a deal of the day and they also have a lot of sales.

Back over the Fourth of July I preordered two books from them: Introduction to Game Design Prototyping and Development and Writing Interactive Music for Video Games. These are both part of a game developer series I have become enamored with.

I ordered these books on July 1st. The prototyping book was set to publish on July 8th. I figured, great, I get the book in a week. Huzzah!

July 8th came and no book. I checked the site and the publish date was pushed back a few days. Okay, no big deal. I can wait longer.

Last week I checked back. The book was now available to purchase and download, but my account page showed that I preordered it and couldn’t download it. I contacted customer service. I was told that I contacted the wrong customer service and I was sent somewhere else. Okay…

I got a response back this morning telling me that my order couldn’t be completed and was cancelled. If I have any questions go to this link.

Uh, why was my order cancelled? Is there a problem with preordering books from your site? Does this mean my other preordered book was cancelled? What happened here exactly? How can I avoid this situation in the future? Is there any way I can still buy the book at the price I ordered it at?

How many of these am I really going to be able to read??

How many of these am I really going to be able to read??

I forwarded these questions back to the representative. I got a response back saying it was between me and my credit card company and that if I have a problem I should talk to them.

No, the problem isn’t with me and my credit card company. It is with you and me. I paid for a product I was not given. I need to get access to my credit card statement to make sure that yes, in fact, I received a refund for the books I ordered. Even if I do talk to the credit card company and get them to authorize this purchase, I can’t get my book because you cancelled my order.

I have purchased books from you every week or two for the last year. I have never had this problem before when I impulsively buy and download random books that catch my eye. Why was I able to buy a book literally two days later but somehow the issue is with the credit card company?

Also, why was I not told the order was cancelled? If I hadn’t contacted you asking where my book was would I have gotten my money back or would you have just held onto it?

If someone who has blown over a thousand bucks on your site over the last year contacts you to find out how to give you more money, don’t blow them off. Don’t tell them to talk to someone else and just cancel their order.

I really wish that O’Reilly carried this series, but sadly they do not. I checked Amazon and they do carry the book I am looking for. It only works on the Kindle, which is kind of limiting. However, I do know that this would never happen on Amazon. As much as I am annoyed by bad business practices, I at least know that if they can’t fulfill my order that at least they will tell me about it and I won’t have to track them down.

I have access to this book through Safari Books Online. I pay nearly fifty bucks a month to get access to everything they have. It is probably a stupid thing for me to buy a book I can access online, I just like to know I can touch and feel it. I guess this should be a wake up call for me to stop wasting my money on impulse ebook purchases from InformIT.

So, thanks for not letting me buy that book. Thanks for saving me from myself. Time to get back to reading one of the many multitudes of books I already own.

Lexical or Preprocessor Issue

So, today was the day I decided to bite the bullet and start working on my Metal demo for CocoaConf Columbus and 360|iDev.

Since a large focus of my talk is on GPUImage, I am hoping to put together a light Metal version of GPUImage that processes an image using a series of filters. I want to write between three and five filters that are easily stacked on one another that have a GPUImage counterpart in order to test how fast Metal processes images compared to GPUImage.

I went to look at what sample code is available from Apple for Metal. To my delight, I saw that there was an image processing base project. It includes one filter to change an image to black and white and that is hardcoded. I should be able to go into this project, add my filters, and add some UI elements allowing me to add the filter shaders I write.

Today I opened the sample code. Immediately, there was an error.

“Lexical or Preprocessor Issue: QuartzCore/CAMetalLayer.h not found.”

This is why we can't have nice things!!

This is why we can’t have nice things!!

Huh. That is inconvenient.

Did some digging. Refrained from asking this question on Stack Overflow because the last time I asked a question about the betas I got a snide person telling me to go somewhere else. Headed to the Dev Forums and found this thread.

Apparently, for the time being, there is no support for Metal in the simulator. There should be support for Metal if you have an A7 device like the iPhone 5S (which I have) that is running the iOS 8 beta.

I have not yet updated my phone to the beta. I know we are getting close to the point where it will be released, so it isn’t a huge thing to update to the beta, I just feel like I have no guarantee that stuff will work on there properly even after I update to the beta.

I must say that this latest wrinkle is not doing anything to sell me on Metal.

Metal only works on iOS A7 chips and now further won’t even work in the simulator. I usually use the simulator in my talks to demonstrate things I am doing, but now I have to get it on my device. I think I can use Airplay to show what the screen looks like, but that is one more step that can go wrong in my process.

The other things I am noticing in the sample applications is that most of the class implementation files end in “.mm”, which means that they are explicitly telling the compiler that there is going to be C++ code in them.

I have not worked with Swift as much as I should have, but I am wondering if this is going to be a problem with trying to write an app in Swift. I know that theoretically Swift is supposed to behave like Objective-C in that you can include C and C++ code, but I have not tried to write straight C code in a Swift class yet. Can you write C code in a Swift class, or is the support just that I can import a C class into a Swift-based project? How is this going to work with Metal?

At least with OpenGL ES you have the GLKit framework with should work with Swift. I am interested to know more about this, but sadly I don’t believe I will be able to explore these issues before I give my talk in Columbus.

I am also trying to figure out just how much C++ I need to know to fully work with Metal. I thought that I needed to know about the same amount of C++ as you need to know of C to work with GLSL, but after seeing the number of classes that are implementing C++, I am slightly worried that I am going to be out of my depth for a while.

These are things I am going to have to take into consideration and disclose during my talk. I know most of these issues will resolve themselves in the next few years, it is just slightly frustrating to sit on the sidelines trying to figure out how to make it work here and now.

Fortune favors the brave.

Lay Down Your Burdens

Today I invested way too much of my time contemplating my future. These thoughts were primarily based on these pieces by Ed Finkler and Matt Gemmell. Both of these articulate men spoke about feeling burned out.

Ed has at least 15 years of web developer experience and Matt recently left software development to become a full time writer.

Here is my story.

I began programming in earnest in March of 2012. I began going to school for programming in 2010, but I was working at the time and I didn’t have the time or energy to really immerse myself in programming. By March 2012 I had unofficially dropped out of school and had walked away from programming feeling defeated.

I began a new job. The second week I was there our team lead walked in, closed all the doors, and told all of us under no circumstances were we to tell anyone in the company that we had no work to do and that we were to pretend to be busy.

Along with looking for another job, I also started working through the tutorials on Code Academy. It looked kind of like work and it was something to occupy my time. Ever tried doing nothing 40 hours a week? It’s living torture. Doing those tutorials kept me from having a complete nervous breakdown.

Miraculously, I discovered that if I spent 40 hours a week coding, I actually was able to learn it. Before I embarked on this experiment I had to look up how to write a “for” loop. I got to a point where I could just code. I didn’t feel stupid, I could do things and make stuff work. I felt amazing.

I was eventually fired from my job, but I actually finally understood what I needed to do in order to be a programmer. I needed to code. A lot.

I went back to school and I was on unemployment. It was going to take a year and a half to finish my programming degree, so I set out to code a lot. I gave up everything I used to love doing to learn programming. I would wake up at 7:00 in the morning and code 10-12 hours a day. I would code tutorials over and over again until I understood them.

I assumed this was temporary. I figured I would learn enough to find a job and that eventually I would be able to get some of my life back. I would be able to read fiction books. I would be able to cross stitch. I could learn to make candy. I would be able to take a weekend off. Hell, I would be able to go on a vacation!!

Welcome to my life,  Jared.

Welcome to my life, Jared.

None of this has happened yet.

I have never been able to get back to the feeling I had when I initially mastered the fundamentals of programming. There has always been another obstacle to overcome. I learned object orientation. I learned to build user interfaces. I learned design patterns. I’m learning a whole new fucking language.

The only thing that gets me through all of this is the idea that somehow, some day I will gain a critical mass of knowledge where I will be able to take a break. I am not talking about never learning another new thing ever again, I am talking about being able to go on a cruise for a week without bringing my computer and having a panic attack because I am wasting time I could be spending reading programming books. I am talking about being able to think about possibly having kids without thinking that it would completely and utterly derail my career. I am talking about being able to write and produce an application without having to immediately go back and redo it because everything changed a week after I finished it.

I regularly work myself to exhaustion. I will be laying in bed completely incapacitated feeling guilty that I am not working. I give myself migraines where I have to have my Kindle pried from my hands because I feel like I should be reading a programming book when I am about to throw up from the pain and I should be asleep.

I don’t want to be Sisyphus. I don’t want to get so close to getting that boulder up to the top of the hill only to watch it fall back down to the bottom. It is fucking demoralizing to see everything you know crumble to dust before your eyes and having to start over.

The Modern Programmer

The Modern Programmer

There is a chapter in one of Anthony Bourdain’s books talking about how when you go to a celebrity chef’s restaurant, like Wolfgang Puck’s, your food isn’t being prepared by Wolfgang Puck, it’s usually being prepared by a guy named Jesus or Jorge. He says being a chef is grueling and you don’t have guys chained to their kitchens into their sixties. He pleads that these guys put decades of their lives into their craft, don’t they deserve a break? Why should programmers be any different?

Everyone has a certain number of times they can watch their life’s work go up in smoke before they say fuck it, I give up. I am not there yet, but I can seriously see a time ten, fifteen years from now when I am there. I don’t think it is healthy for us to just accept that everyone is going to either get career burnout or career obsolescence. There has to be a healthy, sustainable way for everyone to be able to adapt to change at a pace that is reasonable. It isn’t right to treat people like resources to be used and discarded when they can’t take it anymore or want to have some semblance of a normal life. This isn’t too much to ask.

Why I am Not at WWDC

Seeing a lot of the normal “Why are there no women at WWDC??” posts that tend to come out this time of year. I want to offer my very limited perspective on why I am not at WWDC.

I did not enter to win the WWDC Golden Ticket lottery because I could not afford to go. It isn’t just the cost of the ticket. It is also the flight and the cost of the hotel. I estimate going to WWDC costs about five grand.

Five grand is a lot of money. That is a Mac Pro or a vacation to Europe.

There are a lot of people who go out there who do not have WWDC tickets who still paid between three and five grand to just be out there and talk to their peers.

My understanding is that a lot of people who go to WWDC work for companies that pay those expenses.

I don’t work for a company. I used to, but that company did not really value sending people to conferences, so I doubt they would have paid to send me even if I were still there.

I took two years off to go back to school to learn programming. I am now in the rocky process of trying to establish myself as a professional.

I have some health issues that prevent me from being able to work all those crazy hours that are expected of you if you work at the kinds of innovative start-ups that want to do cutting edge iOS technology or have enough money to send people to go play with the new toys.

Replace health issues with family issues and you will see the problem a large number of women have trying to get to something like WWDC. Even if you can afford to send yourself, you are still leaving your children/family for a week to go run yourself ragged.

For better or worse, women are still the primary caregivers of children. My conference excursions are becoming longer and farther away and it is causing an issue between my husband and I. He doesn’t think it is fair that I am going off on these trips without him and expecting him to subsidize the costs associated with them. Even though I am a speaker and many of the costs get taken care of, there are always some costs that we wind up paying.

There are two easy things that Apple could do to get more women at WWDC:

  • Set aside 100-200 tickets for women in technology. Either set it up as a lottery or have women apply using an essay or something. Try to pick people who are doing interesting things and not just the token woman board member at Zynga.
  • Do something to help ameliorate the cost. Waive the cost of the ticket. Set up a roommate system so that if you want to spilt the cost of a room with another woman you can do that to save money. Each time I have gone to CocoaConf Chicago I have ridden down and roomed with a woman I met when I picked them up to go to Chicago and both woman became very good friends.

I will probably never work for Apple. I can’t afford to move out there and I can’t work the number of hours expected of an Apple engineer. I probably won’t ever get to go to WWDC. I think it is disappointing because I would love to go to all of the OpenGL and Core Audio labs and sessions that I hear are a ghost town because no one cares about them. I am working within the constraints that I am given and doing the best I can.

Apple could make bringing women to WWDC a priority. They think bringing students to WWDC is a priority and the set aside 150 tickets for students. If they wanted more women there, they would do that for them too.

But then again, they would also set aside tickets for a lot of the prominent iOS companies that got shut out of the WWDC lottery. They probably had 100,000 people enter into a lottery for 5,000 tickets. They could double or triple the cost of a ticket and still sell out every year. They had nearly 400,000 people download their Swift programming guide within a day of it being announced/released.

Apple is going to do fine without people like me. I can throw a hissy fit about them not including me, or I can just accept the fact that I am in the same boat as a lot of other people and do the best I can with what I have.

I am not going to have the same career as everyone else. That doesn’t make what I do any less relevant than working at Facebook or trying to create a social photo sharing start-up. I don’t think I have to measure myself based on what other people use for measures of success.

To quote a famous philosopher:

“Here’s to the crazy ones. The misfits. The rebels. The troublemakers. The round pegs in the square holes. The ones who see things differently. They’re not fond of rules. And they have no respect for the status quo. You can quote them, disagree with them, glorify or vilify them. But the only thing you can’t do is ignore them. Because they change things. They push the human race forward. And while some may see them as the crazy ones, we see genius. Because the people who are crazy enough to think they can change the world, are the ones who do.”

Just because I am not at WWDC does not mean I don’t exist or that I am not a developer. We’re out there. It might take a while, but you will see more of us. I am not quitting.

iOS 7: The Year that Was

iOS 7 was the first new iOS that I remember having to learn. I started around the time iOS 6 lifted its NDA, so all the books I was reading were out of date with Modern Objective-C.

Since iOS 6 was sort of my first one, I don’t really remember anything “new” from it. Everything was new and I was simply in a panic to try to learn the basics before everything up and changed on me again.

That was different with iOS 7. I had enough of a grasp on iOS programming to be able to grok the differences between it and iOS 7. The fact that there were a multitude of changes stylistically helped things tremendously.

With WWDC just around the corner, I have been talking to some people about iOS 7. Specifically, what worked and what didn’t. There were a lot of new APIs and technologies that were supposed to revolutionize how people created and designed their apps. Some of these technologies were the focus of several WWDC talks. How many of them were actually implemented and have changed the way we design our apps?

  • Borderless Buttons: Borderless buttons are among the most despised changes that I have heard people openly complain about. I can’t find anyone who likes the borderless buttons. Everyone I am encountering is trying as hard as humanly possible to ignore that part of the HIG. I haven’t looked recently, but I think that in Xcode 5 they removed the ability to give a button a border in IB. It seemed to me that this was something Apple really wanted people to be doing, but so far everyone I talk to is avoiding it like the plague. Will be interested to see if Apple backs down on this or if no one is actually going to give a crap about it.
  • UIKit Dynamics: So, Apple wanted developers to add motion effects to their apps? UIKit Dynamics was kind of cool, but it looked very much like a stripped down Sprite Kit. I think it might have been possible to find something new and unique to do with dynamics, but it just seemed like those obnoxious JavaScript effects you used to use on your Geocities site back in 1995. I would love to see someone figure out a neat and innovated way to use these, but generally speaking they don’t really contribute anything to the functionality of most people’s apps.
  • Translucency: This one confused me tremendously. I think that having the interface be layered with translucency could have been a really cool thing to do, but to the best of my knowledge, Apple did not provide built-in functionality for this. If you wanted a blur effect you had to roll your own. If Apple wanted this to be the preferred way of doing things, I wonder why they didn’t make it easier for developers to adopt.
  • Text Kit: Text Kit was the subject of at least three different WWDC 2013 sessions. It seemed like it was an API that Apple was promoting and pushing very strongly. I know that there were some easy implementations of Text Kit to make the text responsive to the user’s font size settings, but I haven’t really heard anyone talking about Text Kit.

    I know of one person doing a talk on it at CocoaConf, but my impression was that this experienced developer was having trouble using it.

    It’s possible that people have done the easy implementation of Text Kit into their apps, but again, not really seeing people getting excited over it and not seeing people evangelizing it, at least not to the extent that I thought they would.

  • Sprite Kit: Again, this surprised me. I know when this was announced that it was a very popular subject with students in my iOS classes. There was a lot of genuine excitement around Sprite Kit.

    I have seen a couple of books about it, but I am not really seeing a lot of people advocating it. I am wondering if it because people already know another engine like Cocos2D that would allow them to port to other systems or if it is because people are not enthused about making game for the iOS platform anymore or what is going on with this.

  • Auto Layout and Animated Transitions: Going along with some of the other style changes from iOS 7, this was another thing I don’t see people doing much with. I have been trying to learn Core Animation, but with the renewed emphasis on Auto Layout, it has been tremendously difficult trying to reconcile those two battling pieces of technology. Auto Layout wants to keep everything in one place while Core Animation wants to make things move. We are supposed to utilize both of these APIs, yet again Apple does not make it easy to reconcile them.

Where Do We Go From Here?

I am wondering what impact iOS 8 is going to have on developers. I am wondering if, since there was such a radical change to the UI, people have simply not had time to explore any of these new APIs.

I am very interested in graphics and a lot of these APIs excite me a lot. Talking to other developers, many are not as focused on these things as I am. They focus on things like Core Data and table views and networking APIs.

So far not utilizing these new APIs hasn’t prevented anyone from putting an app out on the store.

I hope that in the new few years people become more comfortable with things like Text Kit and we see some real innovations in how people create apps. I don’t know if that will happen.

At CocoaConf Chicago, Justin Williams made the knowing joke about every iOS developer waking up in the morning deciding to make a weather app. I have observed that people want to do something that is easy or at least not particularly innovative.

When was the last time you saw a truly innovative app out on the store? I think we are stuck in a self-perpetuating cycle where app developers make something easy that already has a dozen instances on the store, doesn’t make money off of their app, then decides app development is a burst bubble and refuses to put any more effort into it.

I think there are a lot of possibilities out there for people willing to dig into these “new” APIs. I hope that in the next few years more people are willing to give this a shot and do something innovative. I would like to do something innovative (if I ever get any free time!!).

Again, this was the first year I saw a new iOS from beginning to end. I don’t know if any of these are going to be considered failures or what is going to happen in the coming few days, but I was very excited about a lot of what I saw last year and I hope that it is given some more time for people to get used to and to explore, along with all the other neat things we will see next week. I have faith.

Properties and Headers and Ivars, Oh My!

So I have been seriously coding Objective-C for about a year now. I have spent a lot of time just sort of typing things only having a surface knowledge of what I was coding and why.

One thing I noticed in my independent iOS studies is that there are a lot of different places to create variables. Also, there are variables and there are properties.

Why pick a property over a variable? Why declare the property in the header file instead of the implementation file?

Properties

If you are coming from a language like Java, you will know that you are required to write getters and setters for all of your properties. Back in the olden days of Objective-C, you used to have to do this as well. A few years ago Apple decided to introduce a @synthsize property to do the getting and setting for you. Then a few years ago they decided that since it was best practice to do that anyway, it is all baked into the code for you. Just because you aren’t doing it and you don’t see it doesn’t mean it isn’t happening under the hood.

Properties are backed by instance variables. So, if you declare a property in the implementation part of your .m file, a backing ivar is created.

So, if you have:

@property (copy, nonatomic) NSString *myString;

you will then be able to access it in your methods by using:

_myString = @“Hello, World!”;

In this instance _myString is an ivar of the property *myString.

Header Vs Implementation

One thing I wondered about a lot while working with tutorials is why you would choose to place things in the header file over the implementation file. Back when I was just typing until something worked I put everything in the Header files because they would show up in the autocomplete. Then I started seeing tutorials where they declared properties in the implementation file and used ivars.

If you want a property to be accessible by another class, you need to set the property in the header file. You don’t always need or want a property to be accessible to another class because it is something you are using internally. In those cases, use either a property or an ivar in the implementation file.

Apple’s best practices say to always use a property for data encapsulation. There is some debate about whether to use them or not, but that goes beyond the scope of what I am going to talk about here.

There is a wonderful blog post from the Big Nerd Ranch discussing this issue. In this post I am simply exploring what the scope of everything is, so if you are interested, then check it out.

Ivars

Instance Variables (or Ivars) are created in the @interface of your .m file. They are immediately differentiated by the fact that their declaration begins with their type and not with @property.

It is a coding convention to begin Ivars with an underscore. When you create properties that are backed by instance variables those will always start with an underscore, so it keeps things consistent in your program to start yours with an underscore as well.

Demo

I created a small demo project on GitHub to just generally show better examples of this code in action.

Conclusion

This is intended to be a gentle introduction to the scope of various properties and variables. I want to explore some of this topic further, such as what the strong, non-atomic, copy, retain all mean and why you use those, but that is a large enough topic for its own blog post.

If you have any suggestions about Objective-C minutiae you would like clarified and explored, drop me a line on either Twitter or App.net at @RedQueenCoder. Happy to take suggestions!

I hope this clarifies for you how to choose where you set your properties, or at least answers your questions about why they are set in so many different places.

New Directions

I have several things going on over the next month. In about two weeks I have my very first tech talk at Snow*Mobile. Two weeks after that I am giving my first hard-core tech talk at CocoaConf in Chicago.

I still, at this point, do not have an app out on the store. I find this personally embarrassing. I have had some issues over the last few months that have interfered with my ability to focus on my work. I tend to get into a rut where I want to learn about something and once I know about it I tend to want to move on to something else. I need to produce something.

I am going to try and create an app that is ready to be deployed to the App Store in the next month. Over the next month I am also going to try and write about what I am doing every single day.

I would like to write a book on how to create an iOS app utilizing an API. I want this to be along the lines of “Learning Core Data” by Tim Roadley. That book not only talks about Core Data, it also talks about how to populate the UI with the data you are persisting in the data model.

I would like my prospective book to talk about HTTP, NSURLSession, and REST on the networking end of things. I would like to speak about Core Data and data modeling along with aspects of UI.

So part of the purpose of the blog for the time being is to talk about the progress I am making on my app while seeing if I can take the pieces I am working with and explaining them in a useful manner to someone who might be looking for a resource. I also want to see if I can actually write every single day on a focused topic.

Later today I will publish a post detailing my plans for the next few weeks. I will include detailed information about the app I am working on and how I intend to implement it. As time goes on I will write posts about how to utilize the various technologies I am implementing and the resources I used.

I can’t change yesterday. Tomorrow hasn’t happened yet. All I can worry about is what I do now. Now is the most important time because it will never come again.

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.

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.