The new iPad Air

As a mobile developer and tech enthusiast, I am thrilled to have the new iPad Air on launch day. I know unboxing videos are lame and everybody does them but I figured with all of the excitement, I would add my own lame unboxing video. I had recorded a song months ago that mostly turned out terrible but there was a brief part of it that I have been wanting to release. So…if nothing else this was a means to do that.

Enjoy!

I haven’t spent much time with the new Air yet but I am so far very impressed. It is quite snappy as you should expect and it really does feel quite refreshing to use – just more balanced!

WWDC 2012 – Opening Day

Whoa! Hey! It has been a really long time since I have posted anything new and for that I am truly sorry. Looks like my last update was from The Big Nerd Ranch’s incredible Advanced iOS class near Atlanta. Interestingly, a few months later, I find that my next post is from the World Wide Developer Conference in San Francisco – WWDC 2012.

Nearly 2500 miles and hundreds of hours of development time exist between these great developer experiences and I find myself working harder than ever developing new apps and crunching as much iOS knowledge as possible. I have a lot I would like to say about what I have been doing since my trip to the BNR but for now I want to focus on today’s Keynote.

Last year around this time, I was attending my very first WWDC and was able to see Steve Jobs do one of his last (if not the last) presentations. It was amazing to get to see and hear him live! His enthusiasm and presentation style can fully energize a room like none other that I know. I truly missed the way he would always save something special and spectacular for the end – “…one more thing.”

This morning we didn’t have Steve nor “one more thing”, but that didn’t stop the crowd. WWDC 2012 sold out in 1 hour and 43 minutes. Thanks to some great friends, I was one of the exuberant few who were fortunate to purchase a ticket.

This morning, I slept a bit later than I did on Keynote day last year but still joined the line 2.5 hours before show time. At that point it wrapped completely around the block surrounding Moscone West with many people already inside. Regardless, we slowly marched around the block to roughly where we had started over the next 2+ hours. The weather was beautiful with pure blue skies and tremendous amounts of hot sunshine which was in surprising stark contrast to last year’s weather.

Despite my late arrival to the line, I was fortunate enough to get into the main room and make my way up one side about half way up the room just a couple of minutes before a special introduction to the conference from Siri. The Siri intro was quite comical and set a great tone for Tim Cook to take the stage. Tim doesn’t yet have Steve’s presentational polish, but it was clear over the next couple of hours that he has successfully led the team of magic elves that reside in Cupertino. They have really been cooking some great stuff since WWDC2011.

Three main announcements were featured: updates to the Mac notebooks, updates to OS-X, and updates to iOS. All three had nuggets of goodness that caused many a developer to sit straight up on the edge of their seat.

The next generation MacBook Pro really is pretty amazing. Not only is it absolutely beautiful, the resolution and performance appear to be top notch. I really wish they had released this a month ago when I had to get a new MBP! The attention to detail and care in even the placement and efficiency of its fans received huge approval from the audience. It is hard to imagine running a screen with 2880×1800 resolution!

The Mountain Lion update for OS-X is set to arrive next month (July) and is only going to cost $19.99 to upgrade all of the computers in your household! The features of particular interest to me are full air-play support (I have two AppleTV’s and AirPort Express so big YAY), more iCloud integration, Reminders, and iMessage! With these changes, I may actually move to Reminders and off of Google Tasks. I have been wanting completely integrated reminder functionality across all of my devices for a long time! If your home computing and mobile ecosystem is completely Apple, you will really benefit from this release. Notification and Safari updates are pretty sweet too.

The area of most professional interest to me is the announcement of iOS6. As with Mountain Lion, there were more than 200 new features added. The biggest new feature here is a completely new mapping system. Google Maps has been replaced and while I was skeptical when I heard the earlier rumors, the demos today were amazing! We FINALLY get turn-by-turn directions but with Siri integration. I know my Google friends are laughing as they have had turn-by-turn for years. Regardless, the integration of features now has a very complete feel to it. When demoed, the progression of asking about restaurants, seeing the map complete with 3D flyover, and integration with Yelp for reviews and Open Table for reservations looks elegant and has that fluidity and user experience finesse that makes you feel like it has always existed and just works.

Well, I need to get to sleep as day two starts tomorrow! I have taken many pictures and will hopefully update this to share some shortly. Not sure if it will be this week as the wireless in our hotel is more than a bit spotty especially since it is full of people downloading the latest updates and betas.

Happy WWDC 2012 everyone!

Day 2 at the Ranch

So day 2 of class content has wrapped up and I am moving onto my other work and taking a moment to update this.  Today’s class felt a lot less exhausting.  It could be because I slept better last night.  However I really think the content, meals, and surprises of the day kept us energized.

Today was pretty much fantastic all the way around!  Not only did we cover Core Audio which is a topic that I am extremely interested in due to my musical background, but this afternoon the founder and leader of the Big Nerd Ranch IMG_1011-1024x768dropped by as a special guest to teach Quartz.  Yes it was the chief – Aaron Hillegass.  In terms of classroom training I have to say this course really has been world class!

The food today was truly OUTSTANDING for every meal.  Breakfast was as good as yesterday with that same delicious bacon that I am already looking forward to having again tomorrow.  Lunch was PASTA!!!  If you know me, you know how much I love pasta (red sauce only of course)!  It was great!  Tonight’s dinner was also fantastic and the best meal yet.  It was flank steak, some of those excellent little red potatoes, and the best asparagus I have ever eaten.  While eating, I came to realize that I have probably had more vegetables this week than any other time in my life.  I have had salad for lunch and dinner every day and vegetables on the side.  I hope my wife is reading this and is proud of my well roundedness!  🙂  For dessert tonight we had a delicious cherry cobbler thing.  I’m usually not into cobbler but this was quite good.

IMG_1013-768x1024Today’s hike was quite a bit longer than yesterday which was quite cool as the weather was beautiful.  It was also led by Mr. H.  We walked past several more of the scary zip-line stands and today there were people on them.  I had no idea they could move that fast – up to 60 miles an hour.  YIKES!  Many of these lines cross the big stream and are several feet up.  Check out the pictures.  I was told on the hike that the folks here pride themselves on having one of the best zip courses in the world.  It is a truly a sight to behold.

 

So now more about the technical parts of the day.  Again we covered a lot.  This morning was quite a bit of very low level stuff from Core Audio.  We did some real time voice effects and then later some pitch modulation.  I have always wanted to look into audio processing on the iPhone but never gotten around to it.  There are many options for getting sound out of an iOS device and the option we looked at today was about as low level as it gets since we were recording and playing back plus modifying that stream in real time.  Consequently the amount of boiler plate looking code to do all of this was PDU (pretty damned ugly).

This afternoon we focused a lot of time on Quartz, Core Text, and printing (air print).  The exercises here were great but again required a lot of low level coding.  Aaron led this section and showed us the Objective-C APIs followed by the C ones.  The C ones are what we focused on as they appear to have the most power but man are some of the interface calls ugly!

For example, some of the core text function calls require a CFDictionaryRef.  Creating it is the ugliest thing I have seen yet in iOS development.

CFDictionaryRef attrs = CFDictionaryCreate(kCFAllocatorDefault,
                     (const void**)&keys,
                     (const void**)&values, 2,
                     &kCFTypeDictionaryKeyCallBacks,
                     &kCFTypeDictionaryValueCallBacks);

I love OO development – Objective-C, Python, Groovy, and Java and thought I had pretty much seen the last of C years ago when I was writing CAD/CAM software but today proved that I was wrong!  As you have now seen we had to mix C, C++, and Objective-C in today’s exercises.  Yes folks malloc and free still are still in heavy use even in 2012.  I would like to see Apple improve and simplify some of this stuff though.  I’ll be anxious to see what they announce at the next WWDC.

Anyway, day 2 rocked!

 

Hello from the Big Nerd Ranch

IMG_0996-768x1024Howdy partner!

It was a long day of driving but we are here! We left around 9 am and drove straight from Cincinnati to the south-west side of Atlanta only stopping for gas and a short lunch at Fazolis.

The last several miles were just 2 lane roads which seemed to take forever but we had a nice marathon session of audiobooks and NSBrief podcasts to listen to.

After driving deeper into the middle of nowhere we ended up at the red dot on the iPhone GPS – Historic Bannning Mills. When we got here, we weren’t sure we were in the right place. There were a bunch of cabins in the woods and zip-line tree stands all over the place. It looked like a fun place – really not what you’d expect from typical training – though we are not expecting typical training – this is an Advanced iOS bootcamp after all!

IMG_0998-768x1024At the bottom of a hill was the main lodge building which I’ve got to say is really cool inside. I love lodge-style architecture and this one has the essential heavy exposed wood beams, large stone fireplace, cool spiral wood and wrought iron stair case, and the quintessential nice assortment of stuffed animals. Some nice soft bluegrass music is playing here as I type this.

My cabin is pretty nice too! I don’t like cold so I was very pleased to see that I have my own gas fireplace. Actually it looks more like an old wood IMG_0971-1024x768burning stove but it can generate heat! The corner of the room has a big whirlpool tub which I really doubt I will have time to use but it makes the room look nice. The balcony in back has a great view of the stream in the valley below complete with the nice subtle roar of the small waterfalls. If it was warmer, I would leave the door open!

IMG_0987-768x1024Before dinner I took about 15 minutes to quickly explore the nearby trails. From the map, it looks like there are trails everywhere. I love hiking and exploring so this is really cool! There are ruins of old buildings and an old dam.

All kidding aside, this looks like a great place to focus and learn isolated from the hustle of the nearby city. I doubt I am going to have any time for ziplining or much time to hike though I will try to get out for a few minutes if we have breaks!

 

The syllabus looks broad and intense. It covers a lot of things that I am really looking forward to hearing more about. Class begins tomorrow at 9am sharp!

I am still here!

Hey everyone! It has been a while since I have written anything yet I have been hearing nice comments from many of you regularly for several days. Thanks EVERYONE for stopping by. How you find this site is a serious mystery but somehow you find it. The number of visits and diversity of locations from which you are from is very cool! It is really meaningful to see things have started to take off.

So what have I been doing? I have been working a LOT of hours lately both with my day job and some other side projects. Also my wife had knee surgery so I have been quite busy helping out around the house. Consequently my writing time has been lacking. It hasn’t been bad though. The work has been a lot of fun! I have been learning a lot about core animation and listening to the Stanford University Advanced iPhone classes during my daily commute. These are a great FREE resource if you are interested in learning more about iOS. Apple development is a blast and the tools and API really give us developers a lot of power.

I did take a break a couple weeks ago from the development activities to meet again with the band. We hadn’t practiced in months but wanted to meet and record some demo material in case we do try to play out later this spring. The recording sessions went quite well overall and my buddy and bandmate Steve has been mixing the songs all week. We recorded seven and of those he thinks 3 or 4 sound really good so I am anxious to hear the final mixes and figure out how to share some of them with you.

So what’s coming up? I started writing an article on “A day in the life of my iPhone” that I hope some of you will enjoy. It is close to being done and I am anxious to share it and hear back from you. I am also packing up to head out to the Big Nerd Ranch near Atlanta next week for their Advanced iOS Boot Camp and really can’t wait. I have been looking forward to this class ever since it was announced!

Google Analytics – for web and mobile traffic

For some odd reason, I have always enjoyed tracking certain types of data. I was very happy when I hooked up the Jetpack suite of plugins for WordPress this past weekend and was then able to see basic site traffic information. Tonight (guess I should say this morning) I have also incorporated a second level of tracking – Google Analytics.

Setting up Google Analytics to track your own app or web page is pretty simple. It will tie your analytics access to your Google account – a simple gmail account will be just fine.

Go to http://www.google.com/analytics/ and click the link saying “New to Analytics -sign up now.” If you already have a google account just type in your credentials on the next page.  You will need to put a note in your app that clearly states that users are being tracked.

Like many google pages, there is a gear on the top right.
Click the gear to go to the account administration screen
Click the plus sign to add a new account
Now you will enter the name and URL of the site or app you want to track.
After you have filled out this short form, Google will generate a unique identifier for you to use from your mobile app or web page. This ID in their terms is called a UA code.

Once this is set up you are ready to use their UA code from your app or from your web page.

Since this post is meant to be only a high level introduction, I will keep this short. Excellent documentation is available on the Google Analytics site.

Tracking basic web pages
If you want to track a web page, just cut and paste the javascript they give you when they generate the code.

Tracking WordPress pages
If you want to track your WordPress page, I recommend installing a plugin such as the Google Analytics for WordPress plugin. It will allow you to type this UA Code in and then do page level tracking.

Tracking iOS page views
Grab the latest Analytics SDK directly from Google – http://code.google.com/apis/analytics/docs/mobile/download.html#Google_Analytics_SDK_for_iOS
Extract it and copy the GANTracker.h and libGoogleAnayltics.a into your existing iOS project with Xcode.

Open up your application delegate and in didFinishLaunching add the following snippet

[[GANTracker sharedTracker] startTrackerWithAccountID:yourTrackerId                          dispatchPeriod:10
                      delegate:nil];
 Now you can do page tracking with a simple line like this: (note I would put this in viewWillAppear in a view controller)
NSError *error;
if (![[GANTracker sharedTracker] trackPageview:yourPageName withError:&error]) {
        NSLog(@"Analytics logging failed %@", error);
}

Conclusion

There is a lot more you can do besides page tracking, but this is enough to hopefully perk your interest and set something up. As you can see, it is really minimal effort to get something up and running.   They have an API for Android and other platforms as well.  As I said before, Google’s documentation is great and for free analytics, it is really excellent!    The benefit of data like this is to aid you in creating better experiences for your users to see what features they like and what gets ignored.  Your biggest challenge will be in determining what and how much to track to gain the best insight into their needs.