Cocoa Camp 2013: (Almost) Final Countdown

Well, the application for Cocoa Camp 2013 is due tomorrow. I am in the last 30 hours or so that I have to complete a decent code sample and submit it for consideration.

I am modifying what I plan to do for my sample. I am planning to make the whole app a series of table views. In the root view you click on cells to select the data that you wish to submit, then at the bottom you navigate to a view that tells you the conversion.

I am eliminating my flag graphics. I figured out that what I wanted to do is more difficult than what I plan to do and would look substantially less professional.

There will be four cells in my root view. The first will prompt for an amount to be converted. The next two cells will bring up the same list of currencies to choose from. The last cell will navigate you to a view that has the conversion information.

I hope I have enough time to puzzle through it. It is an all-or-nothing thing at this point. I can’t submit it if I can only get it to partially work.

If I can’t get it done by tomorrow I will still complete it and put it in my GitHub “portfolio”, so it won’t be a total wash. It wouldn’t be anyway because doing an outside of class project is always useful.

I will keep you posted as to what happens!

This is Why You Need to Understand Technology!

There is a winery in Baraboo that I go to periodically. The guy who runs it is a small time operation. He put together a mailing list of people and started sending out emails. However, the way that he did so was by creating a group email list, which means that any time anyone contacts him for any reason everyone who is on the list gets an email.

So every minute or so I get bombarded with emails from strangers asking to be taken off of the list. The longer this continues, the more often people are sending unsubscribe emails and the angrier they are getting. I got three different emails from the same woman who is typing in all caps “UNSUBSCRIBE ME FROM THIS LIST!!!!!” One guy said in his subject line that if he isn’t taken off this list immediately he will never visit the guy’s winery ever again (I am thinking it is likely that this is a person who only went when he had a Groupon).

I feel for the guy. He has a small operation and he isn’t a techie. He just wants to make his wine and he’s drinking the social media Kool-Aid. He probably has some young relative who is telling him he has to do this in order to reach out to the tech savvy generation. Unfortunately he is alienating the people he is trying to attract.

I hope that he is checking his email or the group listing to see that he has a small mess on his hands. I hope he can do something to rectify the situation with the people whose emails he has inadvertently leaked.

Back to School

My Spring Break is over. It was not productive in the way that I would have liked, but was productive in other ways.

We began learning about UITableViews before the break. Eric the teacher told us that when he was learning these he just made them over and over again until he could do them in a few minutes without looking up any of the methods associated with them.

So that is what I did. Every day during the break I redid the exercise in the book at least once. The exercise goes over three chapters. I only did the last chapter twice, but the first one was done almost ten times.

I am not quite at the point that Eric got to, but I feel better about them than I did before. I am now working on the assignment due for today. I probably should not have left it this late, but there is little to do about that now.

I really wanted to get my Cocoa Camp code sample done. I am at the point where I need to create a contingency plan. I have enough knowledge to do what I want to do, except I can’t be sure that I will have the focus to get it working. I know it is different to do something in a structured way than it is to change the context and do it slightly differently. I could probably do what I need to do if I had more time, but that is not the case.

The application does not specify how complex the code sample has to be, so I could always half-ass it and hard code the currency conversion and only do one currency, but that, to me, would be worse than doing nothing at all.

Judean People’s Front

Monty Python Life of Brian

Men dressed as women dressed as men to throw stones

Last semester I was having some minor coding issues that I wanted to talk through with someone but I didn’t want to bother the teacher about. I reached out to him to ask if there was anyone he knew about who would be interested in pair programming with me. He told me to look into NSCoder.

NSCoder, for the uninitiated, is a night that you set aside to meet up with other programmers to work on code, usually at a coffee shop. This is traditionally on Tuesday nights.

So I looked into NSCoder and hey, there is one in Madison! I kept planning to go to their meetings, but the winter has been pretty brutal. We have had snow storms most Tuesdays and it takes as long to drive from school to downtown as it does for me to drive from school to home.

I decided to create an NSCoder group at Madison College. I reached out over our group mailing list to see if anyone was interested and days people could do. I did not get any response. The few people I talked to couldn’t do Tuesdays.

So I had another person pick up the ball. He sent out an email telling everyone to meet in the cafeteria on Tuesday afternoon any time after 2:30. A couple of us from the afternoon iOS Development class all went down after class at 4:30. No one there, including the guy who initiated the NSCoder meeting. We all stay for about 40 minutes. I left early because I had a brand new puppy that I didn’t want to leave for too long and everyone else had obligations.

I found out later that the initiator did show up a half hour after every one left and just coded on his own.

So yesterday I get an email over the mailing list from yet a third person saying he thinks this is a great idea and we should really start an NSCoder group at school that meets on Tuesday nights. He tells all of us grandly that he will be in the school cafeteria all day coding and welcomes us to join him.

This is a person who dropped out without finishing his degree, so he was unaware that this is Spring Break and no one would be there. He was informed of this fact by someone so he pushed it back by a week.

I pointed out that we have already been doing this and that Tuesdays are not a good night for people that I have spoken to who would like to do NSCoder. I propose we do Wednesday night. The only other people who seemed interested but weren’t trying to reinvent the wheel all said that day worked better. I immediately got smacked down by most of the people responding on this thread that you have to do NSCoder on Tuesday because that is the way it has always been done and that you can’t please everyone.

I feel like I am in Monty Python’s Life of Brian. I feel like no one wants to just belong to the group and code, they would rather bicker about who is the chief and whose idea it was and who is the leader. So now we have the Judean People’s Front of coders and the People’s Front of Judean coders.

I don’t care! I just want to meet up with at least one other person outside of class to code. Who cares what day it is? Why do we have to do things a certain way because someone unilaterally picked a day out of a hat that doesn’t happen to work for anyone several years later in a different state?

I do not understand the mentality of some of my fellow students. A large group of us went to CocoaConf Chicago together. We did an NSCoder night there and were able to meet up with some new people. My fellow students only wanted to talk among themselves.

I went to some amazing talks there. One of them was the Core Audio talk by Chris Adamson. One of my fellow students went to it. I went up to him after and gushed about how amazing the talk was. He said, “Oh, I wasn’t paying attention. I was coding my project and I tuned out what he was saying.”

Why bother paying hundreds of dollars to go to a conference if you are just going to do things that can be done at home more efficiently for free?

Most of them also skipped the keynote speech by Dan Steinberg. I felt pressured to not go to the keynote, but I was on Twitter and I saw all the enthusiastic gushing about how amazing it was and I realized I was being stupid and I jumped ship. I hope one day to get to see the whole speech in its entirety.

I went up to Dan and told him how much I enjoyed his talk. I also went on Twitter to say I wish I had the talk on video. He asked me why since I’ve already seen it once. I was too embarrassed to say I missed the first 10 minutes because I was trying to prove I was cool to a bunch of people I probably won’t be dealing with a year from now.

That is the other thing I don’t understand. These people we are going to school with aren’t important in the grand scheme of things. After you leave school you will have other coworkers and a whole community of professional developers that you will interact with, so if one fellow student is being a piss ant, ignore them. They don’t matter.

Puppy Time!

I got a new puppy a week ago. We got her from the Humane Society and she is four months old. She isn’t quite housebroken yet and her favorite activity is to fight with the middle dog.

She has been a little bit of a handful. I haven’t updated my blog in a week because it’s hard to go more than a few minutes without breaking up a fight or letting the dog out or cleaning the dog’s mess.

Any delusion I had that if I ever decided to reproduce that I could work from home while watching the baby are now completely resolved. Good to know that before rather than finding it out after!

Will get a better, more complete post of my activities soon!

UIPickerView Insight

So for the last week or so I was trying to wrap my head around how to create a custom class of the UIPickerView type. I have two instances where I need to have a list of the same set of options and I didn’t want to repeat my code. Usually that entails putting something in its own class.

Wasn’t really sure about how to do this with that type of object. It already is its own class, so how do you create a class around that? Is it a subclass of UIPickerView or of UIView? How do you implement the UIPickerView required methods if you are trying to put everything in its own class.

It finally occurred to me that it is its own class. I don’t need to subclass it or put any of this stuff in its own class because it already exists. I can create two UIPickerView instances and set them to the same information.

Don’t know if I am explaining my problem clearly. Now that I understand it I am using terminology in my explanation of my problem that I then used to solve the problem.

Basically was over thinking things. I was dealing with something I have never seen before and I assumed it to be a completely foreign thing instead of thinking of it in context of what it actually is and how it functions.

So feel slightly silly for spending so much time pounding my head against a wall trying to solve a “problem” that someone else already solved for me.

Acquiring Focus

Okay, so I have a few days without school to work on my code sample. I know I talk every day about doing my code sample and this probably looks like I don’t know what I am doing, so not sure if I should document my meanderings!

I read a book recently by a gymnast who, at the peak of her career, won the US National Championship. She talked about how when she would get the gym in the morning and hop on the balance beam she would immediately know if it was going to be an “On” day or an “Off” day. She would not feel comfortable doing anything dangerous on the off days because she would not be in her flow.

I feel that way with learning programming. Some days I can focus and I know what I want to accomplish and how to make it happen. Other days I can’t get into my flow. I sit here and fuck around on the internet thinking I will look at just one more site, then I hear the door open and I realize my husband is home and I have been screwing around for eight hours. D’oh!

I know that if I were being asked to do something I was familiar with I could bang it out with no issues. It is when I am trying to do something for the first or second time that have trouble focusing. I have processes that are percolating through my brain and I am waiting for it to click.

I know that I won’t ever be at a point where I am just doing stuff I already know how to do. Things change so much and so fast that you have to be constantly on top of things or else you will fall behind.

I just hope that at some point I know enough of what I am doing down cold that I can get more done.

So the big things I need to do in order to get past this current hump are that I need to set up a dictionary to receive JSON data regarding exchange rates. I have done this once before, but it was with a text document on my desktop. I need to defamiliarize myself with how to parse the data and find out if I need to do something different if I am sending a query to a website rather than reading a text document.

I also need to create the UIPickerView objects. I need to populate them with the countries whose currency I am planning to convert and I need to set them up to send their data to the object that will be calculating the conversion rate.

So I have an object that is receiving the conversion rates and the data from the two Picker Views that determine which rate is being converted and to which rate.

The Flag views also need to receive data from the Picker Views in order to know which flags get displayed.

I really should set up a UML document so that I can visually create a view control document. Crap, now I see why we took that class!

Hopefully this isn’t boring to the five or so people who are reading my musings. Also hopefully this isn’t off-putting to anyone thinking about hiring me.

Brain Storming Box

One of the people at CocoaConf was Jaimee Newberry. One of her talks was called “Super Rad Brainstorming!”. Both she and Josh Smith talked about creating a Brain Storming Box.

A brain storming box contains markers, crayons, paper, clay, etc… Basically anything you would use to create a replica of a layout, colors, whatever you would keep in a box and use to create interesting ideas.

I used to have a lot of this stuff, but I keep losing it and getting rid of it because I don’t think I will use it or need it any more.

So I decided to get this together again today. I bought some cheap paper, colored pencils, and this awesome pseudo-mechanical pencil. It is a lead holder. It is used in drafting. It’s like a mechanical pencil in that it holds a pencil lead that you gradually let out as you use it, but it is also like a normal pencil in that the lead is very wide and you need to use a sharpener.

I also have markers and heavy paper for rendering more advanced versions of my designs. The husband says we will get a scanner at some point soon, so I can scan my drawings into my computer.

I have an Adobe suite that includes Photoshop and Dreamweaver, so that should be useful.

I think it is important to have apps and websites that are aesthetically pleasing. No one is going to use your app if it is ugly or unintuitive. I think it is important to know how to code, but it also important to think about how to make your app nice to use and look at.

I am also thinking about starting a podcast for beginning iOS programmers. There are lots of things I can’t find documentation on about layout and button functionality, so I would like to talk about that.

I am planning on the podcast only being about ten minutes long and focused toward beginners. So just a quick going over of some type of puzzle.

We will see how that goes.

Trying to Focus on my Cocoa Camp Code Sample

So got an unexpected break on my code sample. I checked the text input keyboard options and I can specify a purely numeric keyboard. It makes sense that Apple would make it easy to idiot-proof apps for their devices. So something I worried about figuring out is taken care of.

The big thing I am trying to focus on right now is setting up the picker. I want to have a text box that brings up a picker instead of a keyboard. This should not be that hard. I see this all the time in apps I use. I am having a little difficulty figuring this out.

I believe I read somewhere that you can specify a UIPicker instance as the input for a text box, but this isn’t something I am seeing commonly in my books.

A lot of my books don’t talk about stuff that I find to pertinent. I don’t know if it’s because what I want to do is so easy that no one thinks it is relevant to talk about or if it is overly complex.

Maybe I will write a code recipe book for beginning coders who want to do some specific things. By the time I get done writing it the code will be deprecated.

Always look on the bright side of life…

Also super happy that it is easy to determine which comments on my blog are spam. First off, all but one so far is spam. Second, I can safely assume if a comment includes a link to something consumer related it is spam. For some reason spammers think that people who read my blog want to buy $500 shoes.

My favorite spam comment so far is one insulting me. I deleted it, so I can’t remember the whole comment, but it went along the lines that what I was writing about provided no insight into anything and all of my thoughts were derivative. Oh, and by the way, go to this site to buy Air Jordans!

Restarting the Cocoa Camp Code Sample

Okay, I have come down from my coding high from CocoaConf and I am back to mediocre reality.

I need to work on the currency converter for Cocoa Camp. I need to start it over.

Originally, I did not want any user input other than them selecting the currency and pushing a button because we all know if the user can get something wrong, they will. I did not want to have to validate that any input they had was a number.

Well guess what. That is a requirement of the code sample, it must take a user input for the number. Crap.

Oh well. I think I can still make it where I don’t need to validate numbers. I can create a UIPicker that hold four digits that can be rotated to make any number from 0 to 9999.

Now I just need to make sure all my pickers don’t take up too much layout space or make the app aesthetically unpleasing. I believe there is a way to hook the picker up to a text box so instead of you getting a keyboard you get a picker.