Because it Also Needs to Be Said

Yesterday I got immersed in a conversation on App.net about this incident. A female designer working for a Ruby shop in Ohio was sexually assaulted while drunk at a conference by her boss.

This is causing a lot of discussion about whether or not we have a community of “brogrammers” who feel this behavior is appropriate. I have spoken to several female developers who have had it with the community and are planning to leave because of the experiences they have had.

I want to add my two cents in here.

I have no doubt that this woman was assaulted. I have been assaulted many times (I prefer not to get into the details at this point) and the way she describes her feelings and why she behaved the way she did is consistent with every story I have heard from a real assault victim.

Now, I want to point out that a lot of people did the right thing in this situation. A co-worker noticed that things had gotten out of control and came over to diffuse the situation. Justine reported the behavior. The HR department determined that what happened was inappropriate and they let go of the person who did so.

THIS DOES NOT USUALLY HAPPEN!!

Most assaults that happen are not done by people in public. Had this assault happened in a more private place where others didn’t observe it, I would like to think that the business still would have done the right thing, but the odds are it would have been easier to ignore.

I have been to a half dozen conferences over the last year. I am actually going to another one next week in Boston. I am traveling by train by myself. I have never made a trip by myself before. After hearing these stories it does cross my mind that I am vulnerable. I enjoy going to the bar after the conference and chatting with my fellow attendees. I know that the possibility exists that someone might drug my drink and I would wake up in a room other than my own. I don’t think that is very likely, but I think about it.

I was at a conference in June where there was a lot of alcohol. The party moved to a weird old building on campus in Madison where I and people I had met a few hours ago wandered around drunk after coming in from the rain. I had an amazing time that night, but I knew there was always the chance that something could have happened to me.

I think my risk of being attacked is small enough that I do the things I was to do with my life. I accept that the possibility exists that someone might try to do something to me. I make sure to only spend time around people that do not make me uncomfortable. If someone starts to make me uncomfortable, I leave that situation.

At my last conference, Madison Ruby, I had a person attach himself to me at the end of the conference. After knowing him for all of an hour he acted like he owned me. When I tried to leave him to be around other people he came over and told me that I had “really shitty body language” because he couldn’t read why I had left him.

A friend and classmate noticed this douchebag’s behavior and asked me if I needed help. I said yes, I did. So any time this guy tried to be near me my friend would pointedly insert himself between the two of us. When the guy would be verbally possessive of me my friend would interject himself in the conversation and mess up the guy’s game.

I think what he did was awesome. It really does not take very much to support another person who is being made to feel uncomfortable and do things to make them feel safer. Everyone should do this.

The takeaway I want to interject here is that I feel being a woman who is in programming, engineering, name-male-dominated-field here, is like being a character in a horror movie. Everyone has that thought of watching the blond virgin wandering into the dark alley and you yell at the screen “Don’t go in there!! It isn’t safe!”

No one is (or should be) saying that the woman being murdered by the serial killer in the dark alley had it coming for doing something stupid. No one should say it’s okay for the killer to kill anyone for making a really dumb choice. Even if you put the onus on the serial killer for being 100% in the wrong, the blond is dead.

With Justine, she got about the best result that anyone can hope for when reporting an assault. That didn’t change the fact that she was permanently damaged from the experience.

You need to be more careful.

I wish I did not live in a world where I have to say that, but I do. Don’t close yourself off to every person at any conference, job, or whatever. But do listen to your gut and monitor your relationships to make sure things do not go too far.

Long before this reached the assault stage Justine could have left. She could have said things were too intense and she could have gone home. She tried to stick it out and show it didn’t bother her. That was a mistake.

Again, I am not saying that I think she deserved this or that she is wrong. I am simply stating that bad situations have inertia. They will continue to get bad until an outside force acts upon it to make it stop. If you nip them in the bud early then things are less likely to escalate.

You have control over your body and what happens to you. You do not need to cede your right to control your body to anyone that you do not want. You can leave. You can scream. You have choices. These choices get more and more limited the longer you wait. If something makes you uncomfortable, leave. You will not get anything out of trying to stick out a bad situation.

Stay safe. Be vigilant. Help others who look like they are in distress. Have a buddy to watch your back.

Chasing the Dragon

I am slightly concerned about my future at this point in time.

I am on my (hopefully) last semester of school. I am taking an iOS class, a JavaScript class, and a Java Class.

Each of these classes offers a different future.

JavaScript offers the future of doing web development. Web development is still very huge. Any business worth its salt has a website. Many people are developing apps for the web and using things like Phonegap to use JavaScript to create both iOS apps and Android apps.

Speaking of Android, those apps are written in Java. We currently have a mobile development degree geared towards Android where you take Java and Android development classes. Android is taking over a large portion of the market and Java is still very highly in demand at large companies in the Madison area who specialize in health care.

I feel I am at a crossroads. I know that the point of the programs at school is to make me as marketable as possible. I know enough different things that I should be able to get an entry level job somewhere doing one of these things.

7 of Cups

So many choices, but until you pick one, it’s all vaporware.

I feel paralyzed by choice.

I feel very much like this Zen Pencil’s quote. I know this might cost me a few jobs, but I do Tarot card readings and I am constantly fighting with the philosophy of this card.

The basic meaning of both of these references is the idea of choice. You have limitless possibilities, but once you take one step towards achieving one of these possible futures the other ones vanish.

You must make a choice. You might make the wrong choice. If you do, all other possibilities disappear. You could be the next Steve Jobs or you could make a bad choice and be no one.

I feel like I am supposed to keep my options open. I know I should do my homework like a good girl, keep as many choices open as I can, and look for whatever opportunity presents itself.

I can’t do that right now.

I want to learn Core Audio.

My first degree was in Journalism. I was a newscaster at a community radio station for three years. The first time I placed the headphones on my ears and heard my voice through the headphones over the air I knew my life had changed.

Over the years I lost my affection for news, but never for audio. I went back to school to learn audio engineering. I loved working with it. Things did not work out and I decided to go back to school to learn programming. I figured I made a bad bet on a disappearing technology and it was time to grow up and learn a real skill.

About a year ago I learned about Core Audio. I sort of knew that the programs I used for audio engineering were written in code, but it never really occurred to me that I could acquire the skills to write one of my own.

I am at a quandary. I love audio. I feel working with audio is my calling. I have felt that way for nearly two decades. So far my gut has not paid off.

How many levels of abstraction do I need to get to before I reach the right one? I feel like I keep doubling down on a bad bet assuming that it eventually has to turn around for me.

I feel wary. Everyone tells me if I master this one skill that I can write my own ticket and make a lot of money. I have heard this before. It has never paid off.

How many times do I believe what I hear before realizing that it is wrong?

I can’t ignore my gut. It tells me to keep moving forward. I am ignoring my classwork to learn audio programming. My rational brain tells me to learn Java and get a nice 40-hour-a-week healthcare job with two weeks of vacation and try to have a normal life. My gut tells me to keep moving forward with audio programming. Guess which one I am listening to.

Audio Queues and Audio Units

I am working on doing a Core Audio project for two of my classes this semester. I was supposed to do an internship, but nothing panned out. I am also supposed to work on creating an app to put on the Apple App store for my Professional iOS development class.

Currently I am working my way through the book. I am trying to get all the way through before October 23. I won a ticket to CocoaConf (thanks guys!) and before the conference Chris Adamson is doing a workshop on Core Audio. I would like to get through the books once before I go to his workshop. I know part of the point of the workshop is to learn Core Audio but I would like to be prepared and get as much out of that experience as possible.

Initially I was going to do a synthesizer app. I met a person at a CocoaHeads meeting who has been programming them for the last 15-20 years. He and I met up for coffee and he showed me his code. He also told me he has been working on his synth for four years. I tend to bite of more than I can chew. I have reassessed my project to try and accomplish something a little more achievable.

I am now focusing on creating an app that records your voice and plays it back. After I get it to that point I can add a levels meter and maybe some effects.

The first half of the Core Audio book goes over some audio basics and talks about how to create a recorder using audio queues. Perfect! I can take the command line programs as a starting point and integrate them into an iPhone app that has a user interface.

However, from past experiences, I have found it is a good idea to continue learning things before prematurely ending. I am glad that I did this.

The middle of the book is about audio units. Audio units allow you to do things that queues do not. If my plan was to just create a recorder that plays back queues would have been sufficient. Since I want to add effects to my app, I will need to utilize audio units.

So my progress is that I am about halfway through the book. I have found some working space and I am able to focus on plowing through the book. I really want to focus on just doing this, but I have other classes I need to work on as well. I have not worked on my JavaScript class for a week and we have a group project in the iOS development class that I have let slide. I am not even going to get into my Java class!

I think tomorrow and this weekend should be spent on some of these other things. I know I need to focus on Core Audio, but I can’t just drop the rest of the balls I am juggling. I am learning to delegate my activities and to make sure I don’t let anything slide for too long.

I also would like to start adding some small audio projects to my GitHub account. I need to figure out what will be indicative that I know how to do this without putting anything too valuable up on there. I think the former will be harder to pull off than the latter.

Twitter App Tutorial

One of our assignments this semester is to create an App.net client for class. I have been looking for some clear-cut explanations about how to make a microblogging app utilizing an API, but it has been rather challenging. Most of the documentation out there has been about how to create a Twitter app.

I decided to spend today working with this tutorial explaining how to create a simple Twitter app.

I have to say, I am disappointed with some of these tutorials. Every time I try to run one it crashes on me with weird unknown errors. The debugger says that the code is fine but then when I try to run it the program crashes.

For this tutorial I was able to download a completed version of the code and run it on my machine. It looks like the same thing I have been doing, so I really don’t know. I am wondering if I have something set up incorrectly in the new Xcode.

One thing I will focus on soon (probably not today) is getting better at debugging things. I will add more NSLog statements and breakpoints to see exactly where my code is going off the rails.

Anyway, back to the point of this exercise. I hoped that doing this tutorial would give me ideas about how to do an App.net client. Sadly, this does not. There is a built-in framework for both Facebook and Twitter that was created by Apple with a lot of methods coded in to maximize productivity for coding clients for those two technologies.

Interestingly, there are three microblogging sites that the frameworks supports. The third one is Sina Weibo, or the Chinese equivalent of Twitter.

I did notice that the site I am going to for most of my tutorials has everything in either English or Mandarin. I guess this is fitting in with Apple’s apparent market strategy of targeting China. I should get my butt in gear and actually learn Mandarin one of these days. I just worry that knowing Chinese will be the equivalent of learning Japanese in the 80’s.

Final verdict: This tutorial would be fine for someone wanting to write a Twitter client but it doesn’t help me very much currently with my App.net client. It does give me an idea of what a social networking framework would include and it might indirectly help me when we get into ADNKit and some of the other user created frameworks out there.

I will probably come back to this one when I start delving deeper into the finer points of debugging. There is no reason that I can see why my code would have crashed and I need to delve deeper into figuring it out.

Auto Layout Tutorial

I have a list of things that have been integrated into Xcode that I have wanted to take a look at over the course of this semester. I randomly lit upon Auto Layout. It is something we kept disabling last semester and I wanted to get a feel for what it is like.

I chose this tutorial to explore auto layout. It is from iOS 6, but it isn’t like things change that much, right??

I ran into an issue with using this tutorial. This tutorial does not utilize storyboards. As far as I can see, .xib files are not really supported anymore. You don’t have the option to not include storyboards any longer.

I figured it wouldn’t really be that big of an issue. I would just follow the same directions that I would if this was a .xib and not a storyboard.

There have been other auto layout changes. It used to be that when you put an object on the view it would automatically create constraints. A lot of the tutorial was talking about how to deal with the automatically created restraints. Now that they don’t appear any longer, things are slightly more complicated.

I am not going to continue with the tutorial for the time being. I get an idea of what Auto Layout is like. I know I will need to mess around with it in the future.

It also isn’t a priority to me at my current moment. I am still in the process of coding my apps for functionality, not for aesthetics.

I feel confident that when I get to the point where this is relevant for me that it won’t be too difficult to grok.

Core Audio and Co-Working Space

Yesterday I spend my day working at Bendyworks, a Ruby/Coworking shop downtown. On Fridays they have a “Growth Day” where people can work on sharpening their tools. I have been told by people who work there that anyone can come to work on things, but I have asked one the owners if I can come in anyway.

I spent the day working through my Core Audio book. I decided about a week ago to pursue creating a Core Audio app this semester. I got behind on some of my other classes, so I spent a lot of time this week trying to catch up with where I am supposed to be (I still need to finish my Ajax project, which I hope to complete this weekend.)

I spent the day working on the chapter regarding recording. I have worked through about half the book before and I am finding the code to make more sense the second time through. I am planning to spend the next few days seeing how far I can get into the book before reassessing my application idea and solidifying its specifications.

I have found Bendyworks to be an ideally suited environment for working. It is a calm and peaceful place full of energetic, talented people. It is one of the most safe and comfortable places I have ever been.

I know that they charge a certain amount for co-working space. I can’t afford to rent co-working space at this junction of my career. I know that being able to code there would help me get through all of my projects this semester.

I am planning to reach out to the owners to see if it is possible for me to continue to code there. I would like to explore if it is possible to negotiate a reduced rate or something. I have heard that others have just showed up and basically run businesses out of their space without paying the fee, but I don’t want to do that. I would like to be upfront about what I am trying to accomplish and see if we can figure out a way I can set up and work.

So, the plan for the day is to set forth with Core Audio. I have several long-term projects that I need to work on and I am trying to balance the amount of time I spend on each aspect of the projects. I will post an update about my progress later.

Doing Tutorials

I am probably overloading my methods right now, but there are a lot of aspects of iOS programming that I hear about in passing that I would like to master or know better.

I would like to do one tutorial a week on some aspect of iOS that I want to know better. I will write about these tutorials on here and talk about what I thought about the skill I was learning.

I have done this somewhat with UICollectionView. I am compiling a list of things I hope I can do a quick, several hour tutorial on to get a taste of what the skill is like.

Here is my list so far:

  • Storyboards
  • Auto Layout
  • Unit Testing

If anyone reading this has any recommendations of things they would recommend I become familiar with drop me a tweet! My Twitter handle is @redqueencoder. It is also the same on ADN.

My ADN Client Project

One of the goals I have had this semester was learning how to create an app utilizing an API. There are a lot of things I keep hearing about that I don’t really have familiarity with that I want to understand better. Using an API is at the top of that list.

My understanding of our class assignments is that we are primarily working on two different long-term app projects. One of them is one of our choosing (which will be my Core Audio app) and one that will be an App.net client. We are being given permission to use the API to develop an ADN client for educational purposes. If we want to publish our client we need to pay the developer license, but for the time being we can see what it is like to practice making a client app.

App.net has a tremendous amount of functionality. There is a large variety of various different types of app clients released for ADN. Initially a few of them caught my eye. Ohai looked interesting because it was different than a lot of the other straightforward apps that just republished a stream. Ohai is a journaling app that will allow you to record where you are and what you are doing utilizing the ADN framework.

Rivr also looks interesting. I like the design and the feel that it conveys. Yawp! also caught my eye, but that was just because of the name.

The one I decided to model my project off of is Photolicious. I have been interested in using the GPUImage framework for a long time. When I was deciding what I wanted to focus my energy on this summer it was between Core Audio and GPUImage. It was a tough decision but I chose Core Audio. I am glad that I am being afforded an opportunity to use both of these technologies.

I need to spend some time looking through the ADN documentation and messing around with GPUImage. I will catalogue what I learn from these things as they progress.

Learning UICollectionView

The first concept we were assigned to learn for class this semester was the UICollectionView. Last semester we dedicated a great deal of time to learning UITableView. This seemed like a good first project since this was similar to the table views.

It was recommended that we look at the slides from the 2012 WWDC presentation on the collection views. I downloaded these presentations, but I had trouble focusing on them. I also opened the documentation from Apple. Both of these sources were rather dry and I wanted to find a tutorial.

The first tutorial I found was this one. This tutorial appealed to me because it also utilized two other concepts I have not learned or played around with yet: Storyboards and Auto Layout. I thought this would be a safe opportunity to play around with these things.

The tutorial is fantastic. I realized as I was working through the tutorial that it also utilized an API from Flickr. I applied for a developer key and I worked through the first part of the tutorial.

I realized that this was a little bit of overkill for the assignment we have been given. I looked for a simpler tutorial and I came across this one. This tutorial was written by the author of the book “Pro iOS Table Views”. I looked through this book earlier in the year when I was learning table views and the guy knows his stuff.

I have worked through the tutorial and reached a point where the program doesn’t work and I am uncertain as to why. I was waiting to write this post until I figured it out, but I have a deadline to show I have made a modicum of progress this semester. I am uploading the program to BitBucket later tonight and I will continue to work on debugging the project. Later I will post an update as to why the project was not working.

Redefining my Semester Project

My semester programming project has undergone some changes since I conceived of it and posted my plans on my blog.

My teacher came back with some notes saying that the primary purpose of the project was to chronicle my learning process of creating the app. Since the app was technically done and just needed some polish, I decided to be bold and go in another direction.

I have wanted to learn Core Audio for a year or so now. I have either not had enough programming experience or been too busy to dedicate much time to learning it. I am also now required to complete and independent project in lieu of an internship for that requirement. I decided to dedicate a lot of time to making a Core Audio app and to kill both of those birds with one stone.

I made this decision a week ago. My initial thought was to create a subtractive synthesizer. I really enjoy using Reason and I wanted to make a synth modeled on their Subtractor synthesizer. It is modeled on an old analog synth rack and I really like the aesthetic feel of the analog synth.

On Monday I met a person at my CocoaHeads user group who has been programming audio for the last 25 years. He invited me to get coffee with him so that I could look at his project.

So yesterday he and I met up and I saw what he was doing. His synth is incredibly ambitious. He showed me the code he used to generate a simple square wave. In Core Audio that would have been a few lines of code. In his this was several classes worth of code.

I asked him how long he had been working on this . He told me he started it four years ago. He said he has been “almost done” with it for the last two years.

This was very daunting information. I want to make a synth, but I don’t think it would be a good project for my semester. Even if I just got one component done (which isn’t really likely) then I really wouldn’t have a lot to show for it.

I went to Chris Adamson and asked for advice about how long it takes to program a Core Audio app that does something. Part of this issue with Core Audio is learning the technology and looking through the header files. I wanted to get an idea of whether it was feasible for me to learn enough Core Audio to make something functional by the end of the year as a portfolio piece. He and my teacher Eric both gave me some ideas for a much less ambitious project.

At this point in time I am thinking about attempting either a streaming app or a recording app. I want to work my way all the way through the book at least once before I firmly commit myself to a project.

I have the next four days to just focus on Core Audio. I am through the first two and a half chapters and I need to see how much progress I make over the “long” weekend.

So, my current plan is to spend a few days getting up to speed on Core Audio and then redefine my semester project. That is where I am at right now for the independent project. I will update later with my progress.