Aside

If you get this message when installing a RubyGem:
warning: Insecure world writable dir /Users/[user name here]/.rbenv/versions

You can do this:

sudo chmod 775  /Users/[user name here]/.rbenv/versions  

sudo chmod 775  /Users/[user name here]/.rbenv/

Advertisements

Thoughts on Over for iOS

I sincerely hope that one day that leaders and programmers will pull their head out of the sand and realize user onboarding is as necessary as unit testing, a unique icon, etc. To create a very cool but unusual UI and then not teach the users how they will use it is just asking for bad reviews and loss of brand capital.

It seems like Over was tested by one of the devs that made it and not a QA or user acceptance-type professional.

It’s also not initially clear when you’re editing a photo/text combo that the black areas won’t be saved along with the photo. The app allows you to put text above and below the photo but doesn’t save it. It’d actually be cool for quick little 80s punk style album cover-like designs.

Anyway—very cool features, needs far more hand holding.

Recalcitrant Replicants

What’s wrong with UX?

Recalcitrance.
And by that I mean users that hate change or innovation and the silly executives that let simple minded and unseeing individuals keep beauty and innovation from reaching the greater billions that deserve it.
Do you want recalcitrant users designing your app? Some users will always resist change, no matter how slow or incremental you make it. The Rite of Spring was panned. The iPad laughed at.

Even the best of folks don’t like even the greatest of things at first when they’re shockingly new. Whether it’s the popular knee-jerk reaction Radiohead’s game changing album Kid A, or Smashing Pumpkins’ Adore—or it’s the press’ initial reaction to the iPad—new things that were eventually hailed as essential and beautiful were initially panned, hit in the face with the proverbial rocks. The records were initially jarring to ears expecting something else, brains used to other rhythms to mind-dance to. Then after a couple days we don’t know how we ever lived life another way, a way without this new beautiful media in our brain, making us new as well. Our brain was taught a new way of thinking about something or doing something.

Don’t let recalcitrance defeat beauty. Don’t you ever.

NSArray Randomization & Psychedelia

While the primary source of application inspiration for most seems to be other applications, at Noble Gesture we tend to take inspiration from film, the shape of a person’s body, the way California’s ubiquitous palm fronds respond to the wind… things of that nature. Lately I’ve been trying to reintroduce the essence of discovery lost in today’s applications and a scene from a recent episode of Mad Men inspired me to have a psychedelic UIView backed by CAGradientLayer that responds to various device input stimuli. One of the necessities of this feature is randomization of NSArrays. The following is a category implementation of such a method:

NSArray randomization as Objective-C category method:

@implementation NSArray (NGDataDynamics)

- (NSArray *)jumbled
{
NSMutableArray *jumbled = self.mutableCopy;

NSUInteger idx = self.count-1;
while(idx)
{
[jumbled exchangeObjectAtIndex:idx
withObjectAtIndex:arc4random_uniform(idx)];idx–;
}

return jumbled;
}

@end

A More Elegant C Struct Initialization Syntax

We often want to set the size of a UIView’s subview to the same, but want it’s origin to be CGPoint zero. In classic C, you need to create a new rect, assigning its value to the view’s frame, then modify the origin on another line, then assign to the subview on another. Due to a GCC compiler addition, we can do all this in one line using GCC’s struct initializer syntax:

#pragma mark - Rect modifications

+ (CGRect)originizedRectFromView:(UIView *)aView


{


return (CGRect){CGPointZero, aView.frame.size};

}