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.

My Semester Project

Background

Back in Fall of 2010 I came back to school to learn computer programming. I came in hopping to achieve a skill in something like Java so that I could get a decent job doing computer programming for a health insurance company.

I waffled my way through the first year and a half of the program. I treated it very much like my Journalism degree where you could blow off the assigned reading and ace the midterm without studying to much. This was a very bad idea. After four semesters I had unofficially dropped out of the program and wasn’t really sure what I was going to do with my life.

I decided a year ago to dedicate myself to programming. I wanted to master it. I wanted to be one of those programmers like Andy Hertzfeld who was one of the top people in the field who helped create the Macintosh operating system.

I gave myself a year and a half to get there. I had three semesters left to finish school. I buckled down and turned learning programming into a full time job.

This is the last semester. This is the semester where I need to begin the process of leaving school and entering the workforce.

Advanced iOS

One of my classes is Advanced iOS Development. One of the requirements we have is to create an app with the idea that we will be able to submit it to the App Store.

I really wanted to work on a Core Audio app. One of my goals is to master Core Audio. I haven’t had a chance to learn this as quickly as I wanted to, so I figured, “Great! Now I have to learn it because it is my semester project!”

I have since figured out that this is a really bad idea. I am super busy this semester and trying to learn something difficult on top of that would result in bad things happening.

What I am planning to do is to refactor my WWDC app submission. I applied for a scholarship with an app I wrote in two weeks. The app is a Portable Wine Journal.

I have the original version of this at Github.

The app “works”, but it doesn’t work the way I would like it to work. It needs a lot of refactoring.

I have a massive list of things that need to be added, upgraded, or fixed:

  • Change to Universal from iPad only
  • Add Apple Docs
  • Change how the data is stored to Core Data
  • Change the point at which data is stored, now if you navigate away from the page the data won’t save
  • Create a picker for grape type rather than make the user type each one in, allow the user to add grape or fruit types
  • Create a picker for region type, also allow the user to add ones they commonly use
  • Figure out how to locate the winery on a map and store the information
  • Figure out how to set the text box up to search specifically for wineries and allow people to see them in a list when they start typing
  • Put a slider in for dryness level rather than typing a label
  • Put a switch in so user can choose to label the wine by name or grape type (wines usually don’t have both)
  • Allow the user to select the wine in the table to modify the form
  • Allow for editing and deletion
  • Format date better
  • Figure out a better way of tracking wine ratings
  • Make the view grouped and figure out how to get the background to show up
  • Do some more general design things to customize the app and polish it

I will be using this blog to track all of the changes I make to this app. I will figure out how to show the changed I make in my GitHub account so that you can go through and see all of the changes as they progress.

I am also going to document other projects, classes, and processes in this blog that I am currently working on. I have let the ball drop on this blog for a few months and now it’s time to get back to work. Geronimo!

The Road Not Taken

I probably spoke earlier in the year about my various disappointments regarding WWDC 2013. I applied for a scholarship and I did not win.

Someone I met somewhere I can’t remember who talks to me on Twitter told me about another conference happening at the same time, GLS 2013. GLS stands for Games Learning Society. It is an interdisciplinary group at the University of Wisconsin-Madison. It is made up of tech people and education majors who are trying to create a learning experience through games

This conference opened my eyes to a multitude of things I had never considered. They showed me tools that others had developed with the express purpose of teaching children how to code by creating their own games.

This spoke to two things that I hold very dear: Gaming and using games to learn.

I grew up playing “Where in the World is Carmen Sandiego” and “Oregon Trail”. I never had a video game console or any of the “fun” games my peers had growing up, but I had games. I loved games.

I can only learn is something is interesting to me. I am very compelled by story. The only reason I know anything about astronomy is because of the vast multitude of celestial object that are named for mythological characters.

For me, the GLS conference was a life-changing experience. It really focused my attitude towards not just becoming a developer, but becoming a game developer.

I wonder how different things would have been had I gone to WWDC.

There was some focus on gaming at WWDC, but the vast majority was focused on grand-master programming. They focus on people who want to scale a code version of Mt. Everest.

I go back and forth. Sometimes I really want to be an elite-grand master programmer who scales Everest because it is there. Other time, I just really want to share my thoughts and ideas with the world and create nice tools that other people can use.

I am beginning my last full semester of school for programming. I am on a track that I hope to continue to take. Right now I am kind of taking inventory of where I am, where I want to be, and who I am right now.

I had a very turbulent summer that I intend to write about at some point. It is still hard for me to talk about, so I hope that if you read my blog you will be patient with my lack of responsiveness over the summer.

I am planning to write here more regularly. I have been advised to keep a public blog of my projects for my development class and this one is already established. Stay tuned for the next few months. Where we’re going, we don’t need roads!

The Day I Became a Programmer

I have spoken a little about my first introduction to programming. It was five years ago and the language was Perl.

I did not progress very far with Perl. I got confused about functions and I did not have anyone to really talk to about my confusion, so I kind of forgot about it and got distracted by other things.

Nearly four years ago I began taking programming classes. I figured that if I had people to talk to and deadlines to meet it would be easier to keep from being distracted.

That worked somewhat well for a while. I took programming classes but I couldn’t remember how to do simple things from memory since we only did them once before moving on to another topic. I found “for” loops confusing because I could not remember what each slot in the parenthesis was for. I had to look it up any time I wanted to do one. I didn’t understand why people wouldn’t just do a “while” loop because it felt so much more straightforward to me.

So I kind of stumbled through programming classes for a few years. I would take the into course to a language and go over arrays, for-loops, and other things another time. Every time I heard it things made a little more sense. I was turning my homework in and I sort of understood it. I had a bad feeling that there was a lot more to it than I was processing, but I was trying to tread water to keep from drowning.

Finally I slammed into a wall: Object Oriented Programming.

The first language I learned, VB.Net, did not talk about OOP in the first semester I took. We kept getting further and further behind and we did not talk about it. When I took the second VB.Net class, the teacher assumed we knew it. The first time we saw classes, we were like, “What’s going on?! There is more than one document! How do they communicate?!”

I had to drop the class because I had absolutely no idea what we were doing. I wanted to take a semester off. I felt burned out and depressed because everything was so hard. Everyone else I talked to seemed to have be programming for years and already knew this stuff. I felt like a failure.

At some point around a year ago, I started using the web site “Code Academy”. They went over these introductory concepts again, but I could do the tutorials over and over again and things began to click. I felt comfortable with these concepts and I knew I could learn this.

I decided to take Java in the fall because the teacher I had had for my first programming class designed the curriculum and I knew that I could learn from him. He had since moved on to designing the iOS curriculum, so I followed him to that program too.

The “Intro to Java” class was the best programming class I have ever taken. One of the first things we did in that class was learn OOP. By tackling it immediately and using it over and over again we were able to process what programming is and how it works.

I consider the day I finally understood OOP to be the day I became a programmer. I have been messing around with it for five years, but it wasn’t until nine months ago when I had that first breakthrough.

I have all kinds of concepts that I have encountered that I did not understand. Delegation in iOS has been one. It is easier to keep working at something you don’t understand once you have had the experience of having a breakthrough and finally getting something that was hard.

I feel that I have made so much progress over the last year. I hope that this is just the beginning of a long period of productivity for me.

I know a year ago I felt very unsure of myself. I did not want anyone to ask me any questions because I was afraid they would figure out that I didn’t actually know anything. I don’t feel that way anymore. I feel like I can learn anything I set my mind to and I am up for the challenge. Bring it on!

WWDC 2013 Disappointment

I did not win a scholarship to WWDC 2013.

I can understand why. I am 31 years old. Programming is my second career. I have only been programming Objective-C for nine months. I have classmates that have been programming longer than I have who can do really cool stuff.

If I had to compete against just the people I know I don’t think I would pick me.

I am happy for the people who got to go. I have been prepping for the fact that it was a long shot that I would win.

I am in good company. There are a lot of amazing programmers that did not get to go.

I really feel glad that I tried. I crashed and burned when I tried to create an app for Cocoa Camp. The fact that I had less time to complete an app but I was able to make it work and do exactly what I planned is a huge accomplishment, at least to me.

I am going to go back and revamp my app to make it work the way that I would like it to. I am going to keep focusing on doing the things that are important to me.

This isn’t my time. I can acknowledge that I have quite a ways to go and that I can get to where I want to be if I have focus and tenacity.

After I get the app to where I want it I will submit it to the App store and possibly throw it on GitHub. It isn’t super cool yet, but I have an interrupted block of time to make it what I want.

Eyes on the destination. Dust yourself off. Keep moving forward.

Status Updates

I have had a hectic week running around trying to get things completed, so I haven’t had a chance to update my blog on any of my activities. Caught my breath, now have a chance to give some status updates.

I got my WWDC application completed! Yay! It works and it has all of the functionality that I planned for it to have.

I created a portable wine journal. You go through, create wine tastings, and add wines to your wine list that you can then look back at later to figure out if you liked it or not.

I took it out for a test drive on Thursday. Middleton, WI had a Wine Walk that night and I went with some friends to try out how it works.

I have discovered some design issues that I need to address:

– The save function is flawed. I followed our textbook a little slavishly on the “save” function because I had not done it very often and had not sorted it out quite yet. I have the app set to save when you push the home button. So if you create a large list of wines and navigate off the page in any way other than to go back to the home screen, your wines do not get saved. For some reason your tasting gets saved, so I have a large list of empty wine tastings. Super counter-intuitive and annoying. I would be mad if I bought this app and it did this.

I figured out the save function was flawed when people would come up to me and ask what I was doing and where I got the app. I would navigate people though it, but none of my data saved and it did not go very well. Fortunately most people I showed it to were drunk and they won’t remember this and think badly of me! šŸ™‚

– I designed it for the iPad because I thought that more people would be using it on one. Going to the Wine Walk I realized that it was a pain to do so. You need two hands to type into the iPad and you are already holding your wine, so you have to find somewhere to sit down to type everything in. This would work far better on an iPhone.

I will need to, at some point soon, go in and fix these features. I got behind on my homework because I was trying to get this accomplished, so I need to put it on the back burner for a little while.

When I get this up and running I will put it up on GitHub.

I feel proud of the amount that I accomplished in the time I had allotted. I got something that works as designed. The design is flawed, not the code. I made it look nice. I included documentation about all of the features I planned to include when I have more than a week to work on it. I figured out a useful app to make that was limited enough that I could complete it in the time allotted. I successfully accomplished what I set out to do and I am okay with whatever the outcome is (but I would be far happier if I won the scholarship to WWDC!!).

What Do I Want??

I am beginning to ruminate on what I want to accomplish with my career when I finish with school.

Here is what I know I DON’T want:
– Work for a large company doing enterprise-level programming.
– Work for a company utilizing a language that is for all intents and purposes dead but won’t be replaced because the company invested a lot of money in its architecture so if I ever get laid off or the company goes out of business I will never find another job again.
– Work for a bully
– Work for someone that tries to compromise my moral integrity

Here is what I DO want, both short and long term:
– Work with media (either graphics or sound)
– Write books
– Attend conferences
– Do talks at conferences
– Do trainings at conferences

I am uncertain how I go from where I am now to getting to where I want to be. I am assuming the Dan Steinbergs of the world did not graduate from college and start going out and doing talks. They had jobs that they went to where they honed their skills and acquired their hard-earned expertise.

I know that I need to learn either OpenGL or Core Audio. I want to learn Core Audio. I went to a conference two months ago where I got a taste of Core Audio. I came home and blasted through a hundred pages of Chris Adamson’s book in one night of glorious coding.

Since then, nothing.

We have been working on table views and modal controllers in class. These are such alien concepts that I have been doing our assignments over and over again until I can internalize what each line of code is doing and why it is there.

I keep thinking if I have a solid block of time with no obligations that I will learn a specific concept, but then life gets in the way and the time slips by without me getting a thing done.

I would like to spend this summer mastering Core Audio. I am supposed to get an internship for school and for my husband so that I don’t have a solid block of several months where I am earning no money. I don’t think I can sell the idea to him that the temporary loss of money is an investment in the future because I worry that I won’t get anything done.

So here is what I am going to do. I am going to dedicated a certain amount of time every week to Core Audio. I am treating my time at school like a job. I clock in, study programming, and at some point at night I clock out. I think that spending my summer setting my own hours and setting my own goals would be an invaluable thing to learn how to do, but I feel I must try to find paid work even though I think that in the long run learning how to structure my own work hours would be far more valuable.

The other concept my brain is bashing up against is the idea of “the long run”. I got journalism degree, but didn’t have any video skills, so I got a video degree. I found out that television journalism pays nothing but that doing sound for film is lucrative so I studied audio engineering. Then the recession hit and the whole bag of tricks blew up in my face.

Nothing in life is certain. I can’t plan on spending several years learning something that might vanish in a poof of technology. This is yet another reason I would rather spend my summer learning Core Audio, so that I can jumpstart my career when I get done instead of toiling doing something I don’t want while trying to eke out a modicum of time to work on the things I eventually want to do.

So, I am writing down here, that I am going to dedicate at least three afternoons a week to Core Audio. When noon hits on Mondays, Wednesdays, and Fridays I will finish up what I am doing and I will work through Core Audio. If I get on a roll I might up that to more days in a week.

If something is important you need to make time for it. I need to master Core Audio to the point that I can produce something impressive. I need to stop being distracted by all the other things I want to learn, even within the iOS environment. No Game Center, Storyboards, or Core Data. Just Core Audio. And the stuff I am doing for class.

I know that this epiphany will fade as all the rest of them do, I simply hope that by writing it down and putting it out there that I will make it happen and hold onto it even when I don’t feel like it or I have an assignment due.

Blog readers, hold me accountable!! šŸ™‚

Thoughts on Being an iOS Programming Student

We are about halfway through this semester and I just wanted to put down some thoughts on being a programming student versus being a liberal arts student.

I have a bachelor’s degree in journalism and an associate degree in video editing and graphic design. With those degrees there isn’t really a lot of “learning” per se. You read a book and write a research paper on it. You can plow though a book and you basically do a bunch of work. Read a lot, take notes, organize them, bang out a paper. That’s it.

Learning programming is considerably more difficult. You have to see the concepts over and over again. You have to code something three or four times before it begins to click in your brain about how all the pieces fit together.

I feel like someone gave me a box with a thousand gears in it and they told me that if you fit ten of them together, you get a watch. The first time they give you the ten, the next time you have to find them in the box and figure out how they work together.

If you do this often enough and reuse a few gears you start to get to the point where you can identify a few of the gears that make a watch from the box. After a while you figure out more and more of the gears you need. The goal is to get to the point where you can pick out all ten gears based on knowledge or memory or intuition.

Why am I bringing up the gear analogy?? It’s because there is this push and pull between the teacher and the student about how much work can be done versus how much work needs to be done.

I know that many of my fellow students feel we are being asked to do too much. I will admit to feeling like too much is being asked. I feel like I need to do the book work two or three times before I can even contemplate doing the written assignment Eric gives us. Eric calls the book work a “typing exercise”, but I need to do that typing exercise a few times before I understand it enough to even try doing the written assignment.

On the other hand, I understand that Eric would like us to do even more than he is asking us to do. The sheer scope of what you need to know to make a professional-looking app is enormous. How fast can you go through the material while satisfying both the teacher and the students, to say nothing of the prospective employers who hope to employ the students?

For myself, this class is very intense. I have done more work on this one class than I did during semesters of my journalism degree when I was taking 15 credits, but this is only a 3 credit course. I think the amount of work we are doing justifies being a 5-6 credit course.

I know that generally speaking if you are taking a 3-credit class it is assumed that you will spend about three hours in class and spend 3 hours outside of class doing homework. I am spending at least 30 hours a week outside of class doing the work and I don’t complete all of it. I know I am not the only one.

I don’t mind spending that time doing the work. I know many people don’t have that time to spend doing this work and that most people I am speaking to are planning to take this class again and to also take the prerequisite Objective-C class again.

How do you solve this issue? How do you give the students enough work that they are able to complete it while learning something without overwhelming people to the point that they feel it is necessary to take the class two or three more times?? I honestly don’t know.

I think that college shouldn’t be a one-size-fits-all model. If you are taking a math class or a computer programming class you should not structure it the same way you do an English class. If you have to spend over a dozen hours outside of class to master the material, then make the class worth more credits. Either that or change the curriculum where you are taking 6 programming classes instead of three, but taking them over and over again.

This would clear out all the students who drop the class the day before the drop deadline then take it over again with people who have never had the material before. I know that it is depressing being in a class full of people who already had the material who grasp it more quickly than you do. Most people are too embarrassed about being “stupid” that we won’t go up to people who already had the class who understand it faster because we feel like we need to “figure it out on our own the way everyone else in the class did”.

I know I don’t like having to explain to my husband about why I have to spend every waking moment of my life on one class while he lectures me about how he went to college full time while working a full time job and making straight-A’sā€¦(I usually tune out and nod at this point).

Again, don’t mind doing the work. I just wish that the credits or something would accurately reflect the amount of work required to succeed in the class the first time through. I don’t need the class to be watered down by a lot, just want something to reflect the amount of work I put into the class rather than have it be worth the same amount as a history class where you only have to show up twice a semester and take a multiple-choice exam.

Getting Ready for Midterms

Tomorrow is my Intro to iOS Development midterm. Huzzah.

I have been laid up with a cold/migraine/sinus infection for a week or so. I have a brand new box of Kleenex that I used half of already.

I did not complete my code sample. What I wanted to do was a few steps beyond what I am capable of doing. I am going back and forth on how to do outside work such as this. Should I try to stretch and do something I don’t know how to do yet or is it a waste of time because it is usually harder than I think it will be.

I wasted a bunch of time trying to figure out the UIPickerView without really understanding the mechanics behind how they work. I didn’t think it would be that hard. In PHP you can do the drop-down method in a few minutes. I did not realize that there were going to delegates and data sources and a bunch of other things that need to play nicely together.

I don’t know if trying to figure that out on my own before learning it was a waste of time. I don’t think I really understood anything out of it, but I learned how to look stuff up?

There seems to be two schools of thought on programming: You sit down and puzzle it out on your own or you ask someone for help because you can get something accomplished in five minutes that you might take days to figure out on your own.

I tend to generally cling to the second school of thought. I think that it is similar to the quote by Thomas Jefferson about the patent system: “He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me.”

I think as long as you are able to process the help you are given by someone who knows more than you do, you are not being a user. Everyone started somewhere. If you get help from someone when you are a beginner, then you have a responsibility to pass that information down to new beginners.

But occasionally I get stubborn and think that I can learn it on my own with no help from anyone. Sometimes, if it’s something that isn’t too far away from what I know how to do, I can figure it out. If it is something I have never seen before, it is usually way harder than I think it will be and I get nowhere.

Also have similar thoughts about tutorials. One could argue that tutorials don’t really teach you stuff because you are typing out what another person figured out and wrote. I find them to be useful, especially if I do them multiple times. The first time you do it, it just kind of works like magic. The second time you kind of start to piece together how everything works. If you wind up doing it a half-dozen times or more you really understand what is going on and you can apply it to other things.

So I agree if you do a tutorial once, it really doesn’t do much more than introduce you to a concept, but if you have the patience to do them multiple times they can really aid understanding.

Alright, I should be studying and not procrastinating on my blog :p

Hadn’t posted in a little while and I did not want anyone to think I had abandoned my posts!