The (Obvious) Importance Of Customer Convenience

There’s a discussion over at the Pebble forums about whether a user should be able to manage multiple Pebble watches in the Pebble app for iPhone or Android.

http://forums.getpebble.com/discussion/9928/feature-request-update-ios-android-apps-to-support-multiple-pebbles

Why manage switching between multiple Pebbles from the Pebble app? Well, for one, it’s a better user experience.

Most customers wanting to do anything with their one Pebble, or many Pebbles, will naturally go to the Pebble app. That should be embraced.

The Pebble app should be the single place for all things Pebble. Doing that affirms a positive user, and therefore brand, experience and keeps the user focused on Pebble. Having an app that allows customers to manage multiple Pebbles in an easy way will also encourage them to buy more Pebble products.

If managing another Pebble becomes a hassle, then Pebble potentially looses additional sales to a current customer. Worse, that now less-than-satisfied customer means it’s less likely Pebble sells to others who read or hear that the app isn’t that convenient.

Anecdotally, think where the iTunes ecosystem would be if you couldn’t manage multiple iPods, iPhones, etc. within the iTunes app. The answer is, not the dominant position it is in today.

Xcode 5 Notes

Some migrating their iOS projects over to Xcode 5 but not converting their project’s xib(s) or storyboard(s) might notice that the performance of Xcode drops when trying to edit those files. Looking in Activity Viewer, it isn’t Xcode that is taking-up all the cycles, but a tool, Interface Builder Cocoa Touch, that has now gone from using its normal smidgen percentage of CPU to over 60%! This will make editing a storyboard or xib very painful.

A search of “Interface Builder Cocoa Touch” will not result in links that address this is issue. After all, Xcode 5 has only been publicly available since today. So what to do?

The problem is the Interface Builder Document settings for the iPhone Storyboard or xib in which the performance is laggy.

Start by looking in the File Inspector of each storyboard in which the performance problem exists. It is likely that the storyboard Interface Builder Document setting was set for “Xcode 4.6″. That is, as it turns-out, bad. Changing the IB Default Document setting of the xib or storyboard to “Default Xcode 5″ will fix the problem. Once you make that change, the Interface Builder Cocoa Touch tool will return to its sipping of only a few threads and using 0.0% of the CPU.

VC Funding–SiValley vs. Texas

After reading an article in the New York Times about how music acts as a possible attractant to start-up’s, I wanted to get some numbers to see if that were true. From a historical basis, it’s important to remember that in 1999 Texas was doing nearly 10% of the venture funding of Silicon Valley, of as I call it, SiValley (cute, huh?).

2012 VC Funding

Year SiValley Texas Austin
2012 $10,968 $934 $621
% of SiValley 100% 6.2% 5.7%
2012 VC Funding Stage SiValley Texas % of SiValley
Seed $316 $2 0.6%
Early-Stage $3,279 $180 5.5%
Expansion $4,570 $344 7.5%
Later Stage $2,802 $408 14.6%

Source: PricewaterhouseCooper MoneyTree Survey

GLKit – Transforming A Vector With A Quaternion Part II

OpenGL 3d axes

As nice as yesterday’s post about one way to transform a vector3 using GLKit,


- (GLKVector3)transformVector3:(GLKVector3)inputVector3 withAttitudeQuaternion:(GLKQuaternion)attitudeQuaternion
{
GLKVector3 deltaV = inputVector3;

//Always ensure that your attitude quaternion has been normalized
attitudeQuaternion = GLKQuaternionNormalize(attitudeQuaternion);

//Convert the normalized attitude quaternion into a GLKMatrix3.
GLKMatrix3 tempQMatrix3 = GLKMatrix3MakeWithQuaternion(attitudeQuaternion);

//Since v' = v T, where T is a transform matrix, multiply
//the attitudeQuaternion GLKMatrix3 with the necessary GLKVector3.
deltaV = GLKMatrix3MultiplyVector3(tempQM3, deltaV);

return deltaV;
}

there is a simpler way to do this. The authors of GLKit of course knew that vector3 rotation would be a huge part of any application employing GLKit. And they naturally took care of that,


- (GLKVector3)transformVector3:(GLKVector3)inputVector3 withAttitudeQuaternion:(GLKQuaternion)attitudeQuaternion
{
GLKVector3 deltaV = inputVector3;

// Always ensure that your attitude quaternion has been normalized
attitudeQuaternion = GLKQuaternionNormalize(attitudeQuaternion);

// To transform, or rotate a vector using a quaternion, v' = q* v q,
// where q is the quaternion and v is the original vector.
deltaV = GLKQuaternionRotateVector3(attitudeQuaternion, deltaV);

return deltaV;
}

GLKit – Transforming A Vector With A Quaternion

OpenGL 3d axes

Since I haven’t seen this on Stackoverflow, the following is a method to transform a vector (GLKVector3) based on an attitude quaternion (GLKQuaternion).

First, assume that you have a GLKVector3 as input, call it inputVector3. inputVector3 could be yaw, pitch, and roll influences from an aircraft’s control surfaces or thruster output on a spacecraft. You know your vehicle’s attitude and have calculated that attitude into a quaternion. So, the goal is to have the inputVector3 transformed into an ivar, say GLKVector3 deltaV, that is in terms of the vehicle’s attitude.


- (GLKVector3)transformVector3:(GLKVector3)inputVector3 withAttitudeQuaternion:(GLKQuaternion)attitudeQuaternion
{
GLKVector3 deltaV = inputVector3;

//Always ensure that your attitude quaternion has been normalized
attitudeQuaternion = GLKQuaternionNormalize(attitudeQuaternion);

//Convert the normalized attitude quaternion into a GLKMatrix3.
GLKMatrix3 tempQMatrix3 = GLKMatrix3MakeWithQuaternion(attitudeQuaternion);

//Since v' = v T, where T is a transform matrix, multiply
//the attitudeQuaternion GLKMatrix3 with the necessary GLKVector3.
deltaV = GLKMatrix3MultiplyVector3(tempQM3, deltaV);

return deltaV;
}

@WWDC 2013

Good morning! So, here I am at WWDC 2013. I’ve had some coffee and a muffin compliments of Apple, and am now cooling my heels on the second floor. This is much better than in years past when they’d let us chill-out in the nice SF fog…until 9:55 after which we’d literally run to find a seat.

20130610-084913.jpg

Learning The Swizzle & Obj-C Runtime @ Evernote

Learning The Swizzle & Obj-C Runtime @ Evernote – CocoaCoder.org (Austin, TX) – Meetup

The April 19th meeting is being hosted by Evernote. To add to the fun, some of their engineers will present on such topics as method swizzling, just to name one. If you’ve never done swizzling, it’s a big RPG, so be careful how you use it. JC will walk us through that. And more.

Evernote is the latest major iOS house to locate in Austin. So if you’ve thought of making the big jump into full-time iOS work, this might be a good chance.

Creator of Project Gutenberg and eBooks Passes Away

Michael Hart, who created the first e-book when he typed the Declaration of Independence into a computer on July 4, 1971, and created Project Gutenberg, the oldest and largest digital library, was found dead on Tuesday at his home in Urbana, Ill. He was 64.

Michael will be missed. His legacy of openly available ebooks live on. Hart’s contribution to society will be eternal.

http://nyti.ms/n6eJHl

Chameleon – Getting iOS Apps To Mac Faster

ChameleonProjectI was catching-up on my reading on furbo.org and saw two great posts that touch on issues facing iOS app creators.

The first could be a real help to those in the iOS community who wish to port their iOS apps to the Mac. While there is a great deal of commonality between Cocoa and Cocoa Touch, there are some differences. So what is an entrepid iOS to do to get a great iOS app quickly over to the Mac? One way might be Chameleon. Simply put, Chameleon is an API that allows your UIKit calls to work as AppKit calls. Or as Iconfactory puts it,

    If you’re an iOS developer, you’re already familiar with UIKit, the framework used to create apps for the iPhone, iPod and iPad. Chameleon is a drop in replacement for UIKit that runs on Mac OS X. In many cases, your iOS code doesn’t need to change at all in order to run on a Mac.”

That is pretty cool. In addition to the Chameleon library, you can pick up a really pretty t-shirt at Chameleon.

Screenshots-A Legal Way To Get Screenshots

Screenshot 2011 03 25 04 23 15Well, Screenshots is finally done. So, what took so long since the last post about Screenshots on March 7th?

The worst thing about having perfectionist attributes is that sometimes they are detriments. Take, for example, my initial Screenshots demo app. Yes, it worked in so much as it did demonstrate that by using Apple’s Q&A 1702, 1703, 1704, and 1714 you could get they type of screen shot, or screen image, that you could by using UIGetScreenImage(). But it was…how best to put it, so ugly that not even its coder (I) could love it. So I rewrote it. All of it. And then I added features. Yeah…like I said, a detriment.

Ok…so what took so long?

 

More…