Catching up on some blogging

Sometimes I forget how fast time can move when you are busy. I’ve been meaning to blog since going to the escapist expo a few weeks ago, and I just keep running out of time, so this morning while I drink a cup of my favorite coffee, I decided to start this blog entry.

So where do I begin?

The Escapist Expo happened the same weekend as Durham’s Centerfest celebration. I had found out about the Escapist Expo on friday while listening to The State of Things – and decided I had to go. How could I not? Gaming, Games, and Geek Culture!! It was a triple threat. I went and got to hear a session from Chris Hazard – founder of Hazardous Games. I’ve talked with Chris many times, including on both of my podcasts – (Dogearnation – now defunct, and GamesAtWork.Biz – the current podcast). He has an amazing mind and thinks a lot of how to use time travel in simulation games. I then spent time on the show floor, testing out new games, picking up some game inspired music, and watching all the really great cosplay people. Amazing time, hate that I forgot to take pictures. Oh, and I did take part of a team based geek trivia panel, there were 9 teams and we came in 4th. Given that there was a bunch on console gaming (and I don’t do console gaming), I felt proud to place 4th!

Since I didn’t take pictures.. I am linking to another attendee’s blog who took some great pics.

More to come .. soon.. I promise

Today’s Apple Announcement

Well, today’s Apple announcement wasn’t as exciting as I wanted it to be. It wasn’t because the iPhone 5 wasn’t phenomenal, it wasn’t because it wasn’t faster, thinner, better display, or any other reason. It was because the great Apple Secrecy has been shattered. There were no surprises.. Even the last minute crazy rumor of a new set of earbuds, turned out to be true. Yes, I want one, yes I have to wait until my contract is up. Yes it will run all my apps.

As soon as iOS6 comes out officially, I will talk about how some of these new features will be amazing on the new phone. Are you going to buy one?

Sunday is coding time

As I’ve mentioned in recent posts, my day job is a bit overloaded lately. The good news is, after spending significant time working on Saturday, I discovered that I will not have my first thing Monday morning meeting. What that means is, today I get to code!

I’ve been struggling with inserting sprites between layers of a TileMap in my game. To that end, I’ve decided to go back and retake some of the classes I took early on when I first started coding for iOS. I realize that like many things, you need to spend time coding to keep some concepts in your mind correctly.

I’ve also picked up a few new tools to help in the game design, the main one being LevelHelper. This allows for integration of cocos2d and box2d for creating level based games. There’s a great tutorial by Ray Wenderlich on how to make a JetPack Joyride like game using levelhelper. I am hoping to play with this design to get my game designs jumpstarted.

What is your biggest challenge

I don’t have a lot of time to do my blogging, coding, and gaming… I have my day job which has been consuming more and more of my free time, including my time on weekends, and evenings. I bet many of you can relate to that, especially if you are doing mobile development in your spare time. I picked up mobile development a few years ago, as a way of getting back to the code. I’d been a developer many years ago, but as my career advanced, I started doing architecture, management, etc. The more I advanced the less I got to code.

Getting back to the code two years ago, was load of fun. It provided me with hands on experiences that many of my day job’s customers were dealing with. The ability to get back to this level of understanding has been invaluable. Having said that, I am also dealing with many of the challenges that customers and other developers are dealing with. A few of the ones I’ve been dealing with are:

  • Keeping up with multiple device characteristics. Even though most of my development is on iOS, I am still dealing with iPhone vs. iPad, normal vs. Retina. I can only think that adding android or Windows phone will compound that challenge.
  • Testing, and I don’t just mean the device problem. As a one person development team, I find that testing mobile apps to be difficult. I use the emulator to test as much as I can, but I also have to test on my devices. Of course, I don’t have all generations of the iPhone. To that end, I tend to force people to upgrade to “current” versions of iOS. This is probably not practical for most developers.
  • UX/UI design. I am not a graphic artist. So even though I have ideas, I can’t always visualize them. So things don’t look as good as I want them.
  • New toolkits. I am working on a game… Of course I am not an expert on all of the classes and methods within iOS, so adding a game platform library into the mix means I am even less of an expert. When should I use the toolkit vs. native? How to best optimize my apps performance

What are your biggest challenges?

How Fresh is your Code?

I was driving back from the gym this morning, I like to swim on Sunday mornings – I find it very relaxing to do a hour long swim and reflect on what’s the past week has been like. As I left the parking lot, I saw a major grocery store chain’s truck with the phrase “We do Fresh – the Best”. The problem with the giant graphic on their truck was that it was a sub sandwich (or a hoagie if you prefer). It consisted of bread, tomato, pickle, lettuce, ham, olives, and cheese. While the bread, tomato and lettuce could be considered fresh, nothing else on the side of the truck was. Pickles were at one time a fresh cucumber. The olives had been cured. The cheese, was at one time fresh milk. And the ham was also cured. So I guess fresh is a bit of a misnomer.

You may ask why I am writing about this (and yes, I gave away the story in the blog post’s title)? In this age of app stores with hundreds of thousands of apps, getting your app to stand out is more than just having a good / great app. It’s about getting and keeping customers. Let’s face it, your idea may be good, but it’s not hard for people to create very similar apps. (Think about Temple Run and the many knock offs that have come out based on it).

You can choose to expand your app via in-app purchases, and that makes a lot of sense for Freemium apps or those apps which have a defined functional domain that can be enhanced with specific features. But what if you created a utility app? It does one thing, and it does it well. How do you keep people updating it, and new users downloading?

Apple and Android are both coming out with newer versions of their operating systems multiple times per year. Try refactoring your code so that it takes advantages of newer functions. I did this personally with Wasted Time, when I replaced the Twitter code with the native iOS twitter features. Yes, this may cost you some users that are on older devices (or require you to have more complex code), but given the cycle time of people replacing their devices every two years this shouldn’t be too big of a worry.

Also, try reworking your user interface. Are you taking advantage of newer screen resolutions? Are you correctly handling all device orientations? Are you bored with the cool widget you designed two years ago? Change them!

While the sandwich had a bunch of well cured products – olives, pickles, ham – it was the fresh bread and juicy tomatoes that really stood out in the picture on the side of the truck. And let’s face it, it got my attention…

Graphical Lessons at this week’s Cocoaheads Meetup

On thursday night, a group of 26 developers got together at the offices of TekSystems in Raleigh to talk about iOS development. This meetup group is sponsored by both TekSystems and Two Toasters (From Durham, NC). For those who are looking for work as an iOS or Android developer, TwoToasters indicated that they are currently hiring so drop them a note at Careers.

The 26 people in the room ranged from teens to people who could have been their grandparent. Was great to see this expanse of ages, and I was impressed at the discourse and questions across all ages and participants.

The Triangle Cocoaheads who run the meetup made sure we had a great set of presentations. You can watch video of all the presentations over at their website.

The first talk was from Kevin Conner, this was all about the collection classes. While most of us are familiar with NSArray, NSDictionary, NSRange, and NSNull, Kevin did a great job of explain various collections and new syntax in objective C. NSIndexSet, NSCountedSet, NSAutoreleasepool, NSOrderedSet, and NSSortDecriptor, and NSCache were all brought forward to the group. Kevin provided examples of when each could be used, as well as information on how they effective app performance. Definitely a video you want to check out for more information.

Up next was Eric Lanz. Last month Eric showed off a organizational tree app he was working on. The crowd last month was wowed by the performance of the graphics, so Eric’s presentation this month was on Multithreaded graphics. Eric has proven that you can do things on iOS that Apple claims can’t be done. I personally have been a bit concerned about how much space graphics take up in my own apps, so I was fully engaged when he gave a few tips for programs to help reduce your graphic files; however this was only a minor part of his talk. Eric provide tips for building your graphics pipeline in your app, so that you can spin off the drawing in separate threads. This allows your to optimize the number of times your draw things, and also kill drawing if the user quickly moves on to a new screen. The goal is to keep your app response, while providing the user informed with enough graphical content. Amazing!

A few of his tricks include building a Dispatch Serial Queue – this will allow you to have a task to run on a worker thread and/or using the Dispatch Global Queue – which on iOS you can’t create yet, but you can get the existing global queue. However, if you use these queues you need to remember to push your graphics context, or you will crash!

Finally, Jay Thrash went thru an architectural “Unburdended ViewControllers”. A key point that I got from his presentation was how the Model-View-Controller approach can cause problems of maintainability overtime, especially as it relates to accessing data. Jay referenced a book I am currently working my way thru from the Big Nerd Ranch called “iOS Programming – the Big Nerd Ranch Way”. This book calls out the idea of a Store – extending the MVC model to MVCS. This abstraction of data allows you to simplify the maintenance of you apps, and deals well with data stores that can be on the device, or via service calls to other systems. A good example to understand this approach comes from the article “Skinny Controller, Fat Model”, talking about Ruby over six years ago. Check it out and don’t forget to head over to Triangle Cocoa to watch this video.

After this we went to the App Showcase of the night, were local developers show off what they’ve been working on. I didn’t catch everyone’s name, probably because I was nervous – I was going to show off my original app – “Wasted Time” and a work in progress for a game I am developing “Traders vs. Trinars”, but we saw a great example on localization. This app demoed changing the orientation of your language for Arabic and Hebrew, i.e. languages that read Right to Left. And a demo from BA3 on their mapping API – Amazing!

Well, I am looking forward to next month’s meeting. Until then, keep on coding!

Triangle DevOps meetup

I’ve been going to more and more meetup’s lately. Seemingly at least one a week. The latest one was the Triangle DevOps Meetup. What an interesting session. We were at the offices of Teradata, and Felix, the presenter, works at Teradata. He took the time to walk us thru setting up our own OpenStack cloud.

Probably the best advice that Felix gave was the first time you get the installation you should work, is to delete the entire setup and redo it, because it was probably a fluke.

Felix decided to do a live demo of this complex setup. Of course it didn’t work out, but it was great to see that no matter how much experience you have in setting up these environments, it is hard. And mistakes are made, which in my mind is exactly why DevOps is so important for people. Get it right, version it, test it, measure it, and automate it.

I am not sure that the demo wanted to show that, but to me, the message was received. DevOps and continuous delivery would have solved this problem, but it wouldn’t make a good demo.

WordPress on iPad

Well, as happens, the day job is consuming more and more time. Luckily the latest update to the WordPress for iPad app addresses many of the problems I’ve had recently. So I am able to write up a quick Huzzah! while getting ready for dinner.

I know work is getting busy when I don’t have time to download any new apps in an entire week. I tried this morning to find a good example of a DigDug game. The old Atari game where you would use a small pump and blowup fire-breathing dragons! Someone should make a good version of this.

Apps are a live and well

The local Meetup scene continues to amaze me. Last night I went to a Meetup called The Mobile App Success Group. Xan, the founder of this Meetup Group, has been successful in developing Websites for some time, and brings ideas around marketing your App, getting development and design resources, and other tips and tricks for starting your business. The goal of the meeting last night was to show a couple of of new Apps that are being worked on.

Both Xan and John (the other presenter) showed off the designs of two up and coming games and asked the participants for feedback. I really liked this approach. Given that the design of games developed by one or two people on their own, they can sometimes get blinders on potential problems in that design. So the attendees at the meetup got to provide feedback and talk about experiences from:

    What Ad network to use, if you are doing an ad supported app?
    How to find a good graphics designer?
    Managing the economy of your game, when you allow rewards to be used for in app purchases.

I hope to have links to both of these games and the websites for Xan and John as soon as they get closer to launch. Xan’s app should be coming out in early Sept.

Both of these apps are guessing games, like DrawSomething, but very much with exciting twists. Can’t wait to play and show off the games as they get ready to launch.