Awkward Penguin

We did it! We submitted our app, Awkward Penguin, to the app store and it's now available to download: http://apple.co/1PUGmwA

We all know how it feels to enter a room and not know anyone. For some of us, the first thing we do is reach for our phones to make ourselves look busy so we don't look helpless while everyone else mingles. We built Awkward Penguin to make the phone a device to bring people together instead of making it an excuse to not interact with others.

Awkward Penguin allows you to attend or create your own event. After creating your profile and entering short facts about yourself, you can see what you have in common with others at an event, giving you a good starting point for a conversation. You can also invite others to play a mini-game called "Break the Ice". Using SpriteKit and Multipeer Connectivity, you play as characters trying to break through the ice of a frozen lake to reach the fish below. 

We used Crashlytics to distribute our app for testing and to get reports on where our crashes were happening, and set up continuous integration to check our pushes to GitHub. It was a great team effort, a fast 2.5 weeks, and a wonderful experience building this app.

CoreBluetooth and SpriteKit

We've spent the past week fleshing out our app. What does it accomplish? What does it look like? How do we want to the user to interact with it? How should it flow? Once we answered those questions, we started building. Our goal is to help the user meet new people more easily at events and meet ups. By allowing the user to see short bits of info about others in the room (like hometown, hobbies, occupation, etc..), it gives them a good starting point for conversation and will tone down the awkwardness of talking to strangers that happens so often at these gatherings. You can also play a mini-game that makes the user talk to the other players, helping them remember their name. For now, we're calling the app Break the Ice.

We're using CoreBluetooth and SpriteKit, and working with both of these frameworks has been challenging and rewarding. Multipeer connectivity with bluetooth is the core of the app. If that doesn't work, you can't see others info and you can't play the mini-game either. Mick and Cameron have been digging into Bluetooth and getting that working, and they've been killing it. I jumped into SpriteKit and started building scenes and sprites for the game. Towards the end of the week, we met in the middle and started adding sprites to a waiting room whenever someone new wants to play. Once everyone is ready to start playing, you enter into the game and try to break through the ice of a frozen lake to get to the fish. The game characters are a bear, a penguin, an eskimo, and a fisherman.

Here's an eskimo test sprite that I put together for testing. Built in Illustrator, animated in After Effects and rendered as PNG sequences. Saved in an .atlas folder and brought into Xcode.  Pretty straightforward.


Bridging Headers in Swift

This past week we dug into Swift, Apple's new programming language. It's similar to Objective-C in many ways, but also very different. I want to spend more time learning Swift as I see it being more widely used over the coming years. It's still less than 2 years old, so there are frequent updates to it's syntax, but as it matures I can see it taking off. I'm glad to be on the front end of something so new.

We broke up into teams and spent this past week building our own version of Instagram from scratch. We used Parse for our backend to store our users and their photos, which made it very easy to save and load our data without storing anything on the phone. After working for 4 days with Mick and Cameron, we demo'd our app, PikCha, yesterday afternoon. 

I had a great time getting to create the logo and icon for the app. There are still some things I'd like to fix and customize visually, like creating something custom for 'PikCha' instead of using Wisdom Script, but I was proud of our team and how much we accomplished over the 4 days. We can add new users, create a profile, take pictures, like pictures, and search for other users and hashtags.

After demo's, we then pitched our ideas for our final project that we will work on for the final 3 weeks. After a whopping 43 app ideas thrown out, we miraculously narrowed it down to 3 and broke up into teams of 3. Teaming up with Mick and Cameron again, we are going to build an ice breaker app to be used at meet-ups and other gatherings. If things go according to plan, it will incorporate CoreBluetooth and SpriteKit. The posts from this point on will mostly be about us learning the frameworks and the process of building our app to present at the end of the month.

Also, I've grown a development beard.

Instagram API

We've finally started covering how to save data to your phone, which I hadn't realized until I saw the schedule for the week. The bulk of the topics we're covering are devoted to persistence, which is a technical term for saving data. So if you close the app, things you did earlier won't be deleted when it shuts down. We dug into the Instagram API and made an app that lets you search for photos, favorite them, and save them to your phone.

If you're curious what an API looks like, here's a snippet from Meetup.com...

So, you dig through the API info and grab what information you want, then send it back to your view to be displayed. That call to the Meetup API to get event info looks something like this...

We also learned more about structuring our projects following the MVC design pattern, or Model-View-Controller. So we have more files now, but those files are smaller and the data gathering is done by the Model objects.  So you go from huge View Controller files to small ones, letting it take care of what the user sees.

We're covering Core Data today and tomorrow, so I'll have more updates on saving data this week.

MapKit

We've been getting into MapKit this week, and I've had more fun with it than I expected. Our challenge was to find nearby pizza locations and display those locations to the user. I had fun making the pizza icon for this one. I didn't get to spend much time on the design other than that one component, but I'd like to come back to it later and spruce it up once it's completely finished programmatically.

UIKit Dynamics

Have you ever played the game Farkle? Yeah, me neither. We've been using UIKit Dynamics to create a version of the dice game. We had to add the shake gesture recognizer so when the user shakes the phone, the dice are thrown around. You select dice that are worth points and then you roll again. It's not where it needs to be quite yet, but my partner Logan and I got it to look a little something like this.

We also got into the Meetup.com API. Using API's and dissecting it's data to show users the right information is very important. I hope to get some time to dig around the twitter API soon.

Delegation and Dynamics

Being able to create your own classes and write custom delegation protocols for them is super powerful, though a tad confusing at first, especially when it comes to delegation. Cameron made an awesome analogy, comparing delegation to The Godfather. The Don needs something done, and he wants you to do it for him. He passes you the information, and it's up to you to carry out that action. He delegates that responsibility to you. I'm getting into UIKit Dynamics, which I REALLY want to explore in-depth. Having a motion design background, I think this stuff is awesome. Like making buttons pop out and wiggle... 

There is some math involved in getting the buttons to land in the right spot, but the nuances of the movement have already been taken care of for you by Apple. They've created a class called UIDynamicBehavior that allows you to add animation to objects with predefined behavior. This one above is using a Snap behavior. It even allows you to adjust the damping, which I've only toyed with so far. 

Day 6

We're starting to get into creating things that are essential to a majority of apps... Table Views. From the settings app to your email, tableviews are EVERYWHERE, so I was excited to start creating with them. My partner Kyle and I breezed through the challenge until we had to make it possible to rearrange the rows and keep that specific rows color the same. It took a while to figure out, but we finally did. I know how important these are to app creation, so I really want to nail this stuff down. We ended up with a nice little to-do app.


Day 5

We had the weekend to work on the Tic Tac Toe game, with one of the steps implementing AI (Artificial Intelligence), or in other words, you get to play against the computer. After trying a few different theories, my partner Jen and I ended going with generating a random number, and seeing if the space associated with that number was blank. If it's blank, place an O there. If it's taken, run again until you find one. It ended up looking something like this.

I'm looking forward to seeing others code tomorrow to see how they solved this problem. This looks bloated to me right now, but it works! I want to go back through and see what I can clean out and also see how I can make it smarter. It's not that hard to beat right now. Also, notice the @"donut" in there? I made the O's donuts. Cause, you know, why not? America runs on Dunkin.

ticTacDough.gif

 

Day 4

We were given the task of building a tic tac toe game, which is simple right? Just slapping X's and O's in some little squares, that's easy. NOPE. For example, there has to be a winner. How does the game know when there is a winner? How does it know whether an X or an O won? Those two questions kept me up pretty late last night, but after asking questions, talking out the problem, and trying different solutions, I ended up with this block of code that runs each time a space is tapped.

It might not be the prettiest method in the world, and I'm sure there are much cleaner and more efficient ways to do this, but it works. We have the weekend to finish it, so I'm just getting started. I may realize a better way to take care of this.

I'm still working on the functionality of the game, so I haven't touched anything relating to visuals yet. I'm finding that very hard to do. If I get stumped on a problem, I want to go over to the storyboard and start working on the appearance of the app. I find that I end up spending too much time designing that I might never come back over to the code and work on the problem. So, I'm trying to hold myself to making it work well first, then focus on implementing the design. 

Day 3

If you're looking at this post through your phone browser, in order for the page to be displayed for you, there is a lot that has to go on behind the scenes. Today, we wrote the code to build our own web browser. No HTML, no CSS, just Objective-C. We had to check things like, did the user type "http://" and if they didn't, we had to write code that would add that to the url for them. We also had to make the URL field disappear when the user scrolls up. That took a WHILE to figure out. There are a few things that I still need to work on to make the browser function the way I'd like it to, like allowing the user to bookmark pages, but as of now it's fully operational. 

I'm looking forward to seeing what's possible just by the end of this week. We have a weekend challenge ahead that will take up most of our time, so I'm curious to see what it is.

Day 2

"America runs on Dunkin" is a funny slogan to me. I don't think many people running around are eating at Dunkin Donuts. I tried this morning while walking on the way to class and burnt my hand when my coffee came splashing out. Who knows what would have happened had I tried to run.

Anyway, day 2 had us learning about segues (pronounced seg-ways). A segue is what happens when you hit a button or something on an app and another screen slides over to replace what you see. That's an easy way of explaining it. They're transitions. Nearly every app you have on your phone probably has at least one segue.

The code challenge had us try to build a simple Mad Libs app that lets the user enter a name, adjective, verb, and place. It then takes what the user entered and places it into a sentence that it displays at the end. After messing around with trying to round the edges of my buttons, so far I've ended up with this. Also, yes I know the gif quality is poor and that it stops on "enter verb." I promise it's fully functional. Photoshop has a 500 frame gif limit. Just learned that. Knowledge is power.

I'm still working on displaying the text in a more pleasing way, but that's it for today. 

Taking the leap

I did it. I never thought I would.

I quit my job.

A little over 4 years ago, I walked into my first job out of college. I got to work with people that I genuinely love and can still call friends today. One of them ended up being my roommate. I got to grow my skills and learn to work with clients, work on a team and collaborate on projects. All of those things I'm thankful for learning there. But after corporate changes that shifted production around, my job changed. It was subtle at first. Less and less creation from our team and more rearranging of elements from other projects. Less risk taking, more boundary building.

One day I was working on a project and thought, what am I doing? I wasn’t challenged, but even worse, I wasn’t benefiting my company anything. They no longer needed the work that I was hungry to do. My design muscles had shrunk over the past year and I wasn't able to stretch them at work anymore. So, I decided to do something about it. I decided to work my way out of the company and create new things. After designing an app last year, I wanted to design more and have the ability to develop more apps. I made that decision 7 months ago.

In my case, there was a lot of work to do in order to leave and be in a good place. One thing I learned, in my case, was being wise meant being patient. Sure I could have just quit months ago, but then what? I would have been unprepared for all the work ahead. So, working on freelance projects, selling personal items, saving money like a crazy person, and studying nearly every night after work, I applied to Mobile Makers in Chicago in December.

I read Quitter by Jon Acuff last year, and it's been like a handbook for me in this decision. I highly recommend it if you're having similar thoughts as I was. There was a lot of planning involved with this. Can I financially afford to leave and pursue this? How does this affect my loved ones? If I just absolutely fail, what's the worst that could happen? If I succeed, what would I have the opportunity to do in the future?

I am a security lover. I LOVE IT. Don't mess with my safe, predictable, paycheck-every-two-weeks life. So this was hard for me. Really hard. But safe doesn't necessarily mean happiness or growth. Do I have all the answers for what my future looks like? Absolutely not. But comparing it with the future had I stayed put, it was clear it was time to move on. Think about what you want. What have you been gifted with? Are you able to use them effectively where you currently are? If so, great! Way to go. If not, don't think that you can't change. You can. It's hard work and be wise when planning it, but you too can take the leap.

 

My journey into iOS Development

Last year I decided to try an experiment. I decided to design an app. As a crossfitter, I noticed that most crossfit apps were clunky and bloated. I wanted something simple, so I thought 'why don't I make one?' Having no clue how to code, I shipped it out to a freelancer through Elance. After a week or two of design, 2 weeks of development, StandardWOD went live on the app store.

After seeing it in on my phone and in the hands of others, thoughts went through my mind.

Why don't I know how to code?

What if I did?

Those are good questions, especially the last one. It's a big one. Being a part of an industry that has the potential to reach millions of people around the world is something I want. So after going through tutorials on Treehouse, diving into Big Nerd Ranch's books for Objective-C and iOS programming, I'm slowly on my way. Progress is slow, but sure. The content of the books intimidated me like crazy at first, but I learned that just because I'm intimidated by something, it doesn't mean that I can't do it.

The same goes for you. Intimidation doesn't mean inability. So what do you want to learn this year? What intimidates you?