Did You Know?

I must have missed the memo, but if you’ve registered your iOS device for development (in XCode), you have the ability to simulate network conditions right on your device.

20130521-003218.jpg

I’m a sad panda

I really want to use Safari as my primary browser. It’s simple, easy to use, and integrates with all my mac devices. It also leaks memory like a sieve. Since the 10.8.3 upgrade I’ve noticed that my computer has been running a little bit slow. A quick look at the activity monitor revealed that Safari was using 2.83 GB of memory.

Really!?

Back to Chrome it is. Maybe Apple should just get out of the browser business and focus its talents on iOS.

No one watches commercials. Everyone downloads apps.

Advertisers are willing to pay vast sums of money to get their message out to the masses. However, the problem(s) facing advertisers today is that:

  • DVR killed the commercial.
  • Print advertising is mostly dead.
  • E-mail marketing is effective, but “delivery” is a problem that lives in your basement and won’t leave no matter how nicely you ask.
  • The jury is still out on Facebook and Twitter advertising
  • And then there’s the tried and true Google ad network. But according to a recent Google earnings report, clicks aren’t exactly what they used to be.

One of the biggest problems facing advertisers (and Google) is that user search is trending toward “vertical” search engines. If you want to search for cheap flights, you go to Kayak. If you want to search for “Christopher Columbus” you go to Wikipedia.

Favorite movie actor? IMDB.

Sports scores? ESPN.

Books, bikes, backpacks, clothing, electronics, or toothpaste? Amazon.

Porn? Well then yes, you would probably use Google.

So how do you reach your users when the audience is so fragmented? More importantly, how do you engage your audience? Simple: Apps are the next big media channel for advertisers.

To be continued…

Did you know

In case you’re not subscribed to the Apple iOS developer RSS feed you may not have heard – or were never aware – that 1) Apple allows you to provide “short links” to your apps in the App Store and 2) the base URL for short links is now AppStore.com

To create an App Store Short Link, apply the following rules to your company or app name:

  • Remove all whitespace
  • Convert all characters to lower-case
  • Remove all copyright (©), trademark (™) and registered mark (®) symbols
  • Replace ampersands (“&”) with “and”
  • Remove punctuation
  • Replace accented and other “decorated” characters (ü, å, etc.) with their elemental character (u, a, etc.)

C’MON! Really!?

People have criticized the iOS ‘Maps’ product as being buggy and unreliable. I’ve defended Apple by telling the critics that ‘Maps’ is a new service and to be patient. It will get better. Now to be clear, I AM an Apple Fanboy. I’ve never shied away from that fact. But even I have my limits.

I was in NYC yesterday for business meetings and I needed to find an address on West 58th street. But no matter how many times I tried, Apple kept insisting that the street address I was typing in was in Brooklyn…at least they got the state right.

C’Mon Apple, get your act together already. I’m searching for a street address that’s probably been there for the better part of two centuries.

Back to Google Maps…for now.

iOS Tips – NSLog()

Like young children — developers seldom remember to pick up after themselves when finishing a project. And while you might think that it’s not a big deal, you’d be wrong. As a developer leaving calls to NSLog() in your ‘Release’ code can significantly affect the performance of your iOS app.

Suppose that you’re developing an iOS app with a UIScrollView or UITableView. And within the scrollview’s delegate you place an NSLog() statement in the ‘scrollViewDidScroll’ method. This means that for every frame you have additional and unnecessary function calls which in turn consume CPU cycles.

Of course, no one likes cleaning up after themselves. So a quick and easy way to disable the NSLog calls in the ‘Release’ code is to define a wrapper macro for logging. What I do is define the following in my project’s .pch file

#ifdef DEBUG
#define DebugLog(…) NSLog(@“%s (%d) %@”, __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:__VA_ARGS__])
#else
#define DebugLog(…)
#endif

The Year 3000

So here’s a thought:

Automakers often make a point of advertising and co-branding their vehicles with other electronics and software makers. For example, there’s the Microsoft Sync system for Ford, Bose Audio systems for GM, etc. But I wonder if the same will ever be true for software and specifically for open source libraries.

In the year 3000, will consumers be able to look at a hardware/software product and see the list of “ingredients”? Why wouldn’t they? This is a very programmer-centric point of view, but I think it would benefit everyone to promote what open source libraries are “inside the box”. Better code libraries would begin to develop their own brand and reputation among consumers and let them know that the product contains quality components.

Will people actually know the difference between whether my apps are using the AFNetworking library vs the now defunct ASIHTTPRequest library? Well…no, but can you honestly tell me that you can tell the difference between an Bose 8-way speaker and the stock car speakers that came with your vehicle?

Food for thought.

The Art of Programming

It’s been awhile since my last blog post. How long? Well, let’s just say that people still used Blackberry phones the last time I had a blog. So to start with, I thought I’d begin at the beginning. This is part one of a 32,976 part series of rants on anything and everything I know about life, liberty, and the pursuit of better programming.

The Ghost in the Machine

Anyone can learn to program. Not everyone can be a programmer. I’m not suggesting that people shouldn’t try and learn how to program. In fact, I feel the exact opposite. Learning to “code” seems to be all the rage these days. “Code Academies” are popping up on the internet like YouTube cat videos and even the mayor of NYC has said that he would learn how to program this year. And in the same way that I think people should listen to jazz, read poetry, or learn how to cook — I think learning how to write “code” will open your mind and ultimately make you a better person. However, as Jeff Atwood (author of Coding Horror) points out in his blog post, the goal of a programmer is not to write code. Rather, the the goal of a programmer is to develop solutions to problems using as little code as possible.

To be (or to become) a proficient programmer requires a different way of thinking. One that is not obvious or intuitive to most people. Because “code” in and of itself has no literal meaning in the real world. Code is abstract. Code is an amorphous blob of 1’s and 0’s. True and False. Yes and No. It exists only in your mind until you put hand to keyboard. But through some combination of energy drinks, espresso, and Chinese takeout we are able to create something from nothing. By combining bits and bytes and lines of code into variables, classes, and objects we create manifestations of real-life solutions to really important problems…like sharing a picture of your dinner with 648 of your closest “friends” on Facebook. It’s ok, I do it too.

I’m not suggesting that it’s hard for someone to become a programmer. But what I am suggesting is that it’s not easy. It takes more than just downloading a book from Amazon and reading the first five chapters on [insert a programming language here]. Ironically it is a discipline that is more art than science despite the fact that it requires scientific reasoning. And just like learning how to cook or play an instrument it takes a LOT practice along with countless hours searching for ghosts that never really existed in the first place. And if that weren’t enough, your code will never be good enough, or fast enough, and it will always have missing a feature or requirement that your users may, or may not have asked for.

So why do it?

Because code is the stored honey of the human soul, gathered on the wings of misery and null pointer exceptions…or something like that.