Folks, the time is coming. All iOS map application will sometime in the future have 3D look.
-
About
codium_extend is a minimalist theme wich can be customize quite easily. Have fun with it!
-
Search
-
Meta
Folks, the time is coming. All iOS map application will sometime in the future have 3D look.
I am an iOS developer with the background of building internet application since 1998. I am not an market analysts but I believe I have at least a despicable sense of seeing where things are heading.
As Siri starts making its way into the hands of millions of consumers, everyone starts taking a poke at it and glancing the future Siri might bring to us.
But no one seems to talk about what Siri might do to internet applications such as Google, Facebook, Youtube, and most importantly the ones I am working my ass off for. To make it short, it seems clear to me internet applications are now facing a very stiff challenge. May I dare to say Siri and its clones will end the internet applications as we know of. I am going to explain why I believe so.
Siri, the life delegate
After short period of poking, we will gradually converge our life into Siri. Firstly, we’ll probably start with simple questions such as a reminder for wife’s gift or rescheduling a meeting as they are shown in Apple’s Ad.
Then, we will start throwing more serious ones.
“Siri, find me a good romance book I can read during flight”
“Siri, what do you say about the new movie Matt Damen just shot?”
“Siri, find the most important person in this room I should talk to”
“Siri, do you believe my blind-date today is hot?”
All these question could be answered because Siri isn’t exactly a speech recognizer. Siri is an Artificial Intelligence that can learn, reflect, and extract the best information for the context you are in based on its service partners and experience with you. Siri could access Amazon, Itunes, Klout, and Foursquare. Even Facebook for that matter. Siri aggregates ratings, meta data, your location, your social graph, and, personal preferences. Thanks to its forever-getting-smarter A.I. engine, Siri will understand what you mean by ‘good’, ‘how about’, ‘important’, and ‘hot’, and then bring you the best choice for your context. Your previous complex tasks to find out the best Sushi restaurant for your date is now reduced to simply saying “I want #5″.
I have been wondering why this particularly interesting video doesn’t get more attention than it should. Tom Gruber at Semantic Web in 2008 demonstrated Siri.
KEYNOTE: The Game Changer: Siri, a Virtual Personal Assistant from Semantic Web on Vimeo.
Siri will eventually take vast majority of decision-making tasks for your day-to-day life, and it will soon to be very inconvenient to live without having Siri right besides you. I for one surely join the party.
Siri, the gatekeeper
So let us look at Siri from internet application developers’ view. We have lived up and developed applications with expectations of receiving ‘direct user interaction’ to help users getting answers for very subjective questions such as ‘how about the movie Matt Damen just shot’, or ‘who is the important person in twitter to follow’. We just barely start recognizing the value of user interaction, and start recommending venues, movies, and books to pay attention.
In the video above, Tom clearly explains that Siri is like a librarian. It reaches out all the applications, aggregates data, judges based on users’ historial preference and context, and comes up with the ‘best’ options.
Now ‘direct user interaction’ is all gone but Siri instead comes choose data based on its experience with what users want, and go away with what it grabs. Or more precisely to put, what users might want. Do you believe the data Siri takes represents true necessity of end users? Well, at least I don’t.
When Siri finally becomes a life delegate, the applications we pour our sweat and blood could turn into not much more than Siri’s mere library, a data container. If Siri does not want my application somehow, it is out of sight and out users’ mind. The awesome part is users don’t even know my application is gone.
I believe Siri will be the next gatekeeper of information flow, and, like it or not, our applications will need to be liked by Siri first, just like websites have to be liked by Google search engine. Internet applications as we know will have to transform tremendously in order to retain user loyalty by the the time I cannot sleep without telling Siri to set an alarm.
With impending iOS 5 release, Object-C memory management is going to change for good. With all the release/retain/autorelease gone, it will be even more of no-brainer than it is now. But just in case it might help some, I would like to lay out a particular experience I have had with my code.
I assume you are already familiar with Object-C memory management scheme; when to owe, when to release, and when to retain. When you are to, however, use Interface Builder heavily for fast paced projects, you often have to let IB handle all the initial construction of a complex view controller that contains a lot of sub-views and even child view controllers. These child view controllers are usually called “nested UIViewController” and one of 2011 WWDC session video explicitly talks about that. Nested UIViewControllers can have their own .nib/.xib file so that you can build very complex view hierarchy out of collection of simple view controllers. Not to mention that you can reuse the simple view controllers however you see fit.
In that case, the parent/host view controller might get retained in the shade. Eventually when you touch “Back” arrow button on top of screen, the parent view controller gets “popped” or “dismissed” from navigation controller, but it will never be deallocated. This is called “zombie” object. Especially when nested view controllers take the parent view controller as a delegate or some sort of referral in IB, it could be just so much pain in your private part if you are not careful.
The side effect of having deallocated but retained zombie UIViewController somewhere in your memory is really bad. It will get you all kinds of colorful pain; EXC_BAD_ACCESS will greet you, NSZombie sometimes won’t find you a clue, memory leak of course, even didRecieveMemoryWarning() gets called on supposedly dead objects. Your app crashes on your face.
I am going to demonstrate three cases where nested view controllers take their parent view controller as a delegate. Each case differs slightly in taking the delegate and the outcomes in the end are of course different.
1. A retain delegate property in interface of a nested view controller.
@interface RetainDelegateViewController : UIViewController @property (nonatomic, retain) IBOutlet id delegate; @end
Then I connect the delegate IBOutlet to its parent view controller in IB, and my parent view controller gets retained one more time. If I forget to release somehow, it never gets deallocated when it gets popped from navigation controller. So, it exists somewhere in memory as a zombie, does all the things a live object is supposed to, and crashes your app since it is flagged to be deallocated but not really deallocated because of the one extra retain.
This is just as obvious as a flying flag. I would highly discourage you if you are doing it.
2. An IBOutlet delegate of a nested view controller without being a property.
@interface PlainDelegateViewController : UIViewController
{
IBOutlet id delegate;
}
@end
This is common for subviews and buttons. Simply because it does not send extra “retain” message to your subviews and buttons, you might have better chance of not leaking memory. When I connect the delegate to its parent view controller in IB, however, this does not go in the way I believe. This yields exactly the same result as a retain property does. This is really confusing so I browse through object-c documents but no use. If anyone could point me a right point to look, I would really appreciate.
3. An assign property in interface of a nested view controller.
@interface AssignDelegateViewController : UIViewController @property (nonatomic, assign) IBOutlet id delegate; @end
This clears all the issues I have with previous two, and deallocate the parent view controller as soon as it pops off navigation controller.
TL;DR
When you are to refer your parent view controller from a nested view controller, always use assign property. You can download IBDelegateRetainTest from Github to see how different the outcomes are.
*There are three view controllers. When they are popped from navigation controller, they are supposed to be deallocated. Take a look at console log and find out which one gets really deallocated.
Two more dogs to go.
First one is “Bouncer”
He’s bulky, hyped-up, and blocks you from going forward. Be aware of him!
Last one is “Boink”. He’s extra sensitive and has a special ability to track you down. When you see him on stage, steer clear of him!

Now all four evil dog designs are drafted, and they will be reiterated for color, skin pattern, and minor details. One of challenges for making good iPhone game is to, I think, deliver properly formatted graphic assets for small screen; small details get lost, lines and major features stand out, light plays big role there too. I don’t really think that I can make solid assets with just one stroke. I might need to go over few more time until I ‘get it’ and using vector oriented graphics such as Adobe Illustrator, Inkscape, or even Blender could help very much in doing so.
I will make another post about how to render your still image properly next time.
First one is Colorotate.
Unlike other color theme generator out there, this beautiful flash website lets you create color themes specifically in pastel tone. It further let’s you export the color themes you create or select in PDF and other format. I use it to generate the main color theme for Catstrict 7, and the theme feels so right.
Second one is Onswipe wordpress plugin.
What the plugin does is to turn your blog into ipad-app-like pages. I just installed it into my blog and the result almost reminds me of flipboard. You should check my blog first to see how it looks. Unbelievable, Unbelievable.
It’s been busy. That’s all I can say. I’ve been re-writing my iPhone 3D code for OpenGLES 2.0, porting few apps to mobile-web-based hybrid app, as well as reiterating dog designs for Catstrict 7. Been doing so, I’ have some words to say but I’m just boiling them down until they are worth to say. So please be seated for one or two more posts in the future.
Anyway, I’d like to show you new dog designs. The response from people for previous shots were pretty disappointing; ‘mediocre’, ‘rubber doll’, ‘you are not working hard enough’. Ok, that’s pretty much what I was expecting because even I myself was not that impressed except the fact that using blender could be very effective for 2D character design. So, I reiterate them and here are two of them.
First one is bullterrier.

I tried to capture its signature head and butt and it turns out to be ok to me at the end. It looks a bit dodgy, on alert, and a bit aggressive. It suits perfectly in its role.
And here comes the second one.

I tried to capture Pug into it, then it turns out some kind of mixed bleed with uptight, anxious look. Pug indeed seems a bit relaxed and gives “please hug me” look while this one looks a bit uneasy and stupid; that’s really good for its role in game.
Dogs play evil role in in Catstrict 7. Evil characters hence need to be edgy and dark-colored, and should look a bit upset. Two of them above so far suits fine for 1st-time iteration. I will however reiterate their skin color, pattern, and few more details such as ear-shape so I will much more unified feel across all the characters, background, and platform as well.
Good thing about using blender is designs are all in vector format in essence. However I want to reduce a rendered image size, the fidelity of designs is preserved. On top of that, the one single lighting scheme could be applied all over the characters so that all of them mix well together. In fact, four shots above are taken with exactly the same lighting scheme and I could reuse that lighting over and over again. How do you like that?
First of all, I’m a terrible artist. My mediocre drawing skill is literally hurting my capacity to churn out games rapidly. I’d very much like to hire someone or to co-work to accelerate my projects, and I’ve been searching for talents in my local ever since. No luck so far. If you have urge to work on casual game art with an individual developer, let me know.
Whatever the case might be, I need a good art assets. More likely, I want a set of assets with unified look and feel. Everything has to be completely unified in one color scheme, one drawing style, and one feeling. The gap between my reality and the obnoxiously picky attitude to artwork quality always burdens my heart. Then all of sudden, out of blue, a ray of light is shed on me. I am subscribing iDevBlogADay, and Luke Rodgers was doing 2D artwork in Blender! That sounds so right because I know how to handle dots in 3D space with Blender and coat with skin! Since Blender thereafter handles very nicely all the curves, shadow, and highlighted area, I can bring professionally handled characters into “Catstrict 7″!
There are of course pros and cons
pros:
Cons:
The downside does not discourage me because I am in a situation where the rendered results do not need gory details like usual 3D artworks do. We are talking about 320×480 (640×960) pixels screen right? Detailed wrinkles probably won’t make much difference in the end, and I should focus on big features such as big eyes, shape of face, and etc. These facts lead me to model low polygon shapes and save me huge chunk of time in the process. ( Nevertheless, it takes good five days to refresh my memory for shortcuts in Blender. Arrrrrgh!)
Here comes what I have done for last few days.
First one was tried to find out distinctive features of a cat face. Close to real cat head. Not that I want it.
I’m getting away from realistic look but close to more cartoonish style. However, he looks like a blob of bubble to me. Why your eyes are so rectangular?… Next?
First cartoonist cat head. Gah, this is horrible. I have to try again.
That’s better. But seriously, what’s happening to your nose and mouse?
Ok, This one starts showing some promise. (I named him “Hamlet”. say hi!) Let me remind of myself. ‘I am making 2D game character for small screen. I don’t need full-fledged 3D volume for the character. Something exaggerated in its characteristics with flat, curvy, and smooth look is more likely what I’m looking for.’
That one is skinned and tested with a texture. Need to fix the light and shadow.
Big, chunky bouncer dog. He should have voluptuousness, grudgy, and reserved look. hmm…
With different shader parameters and light types, I rendered few shots. Like I mentioned earlier, I can generate different looks of a character just with one model and a texture. Over and over again. If a particular setting for shader and light suit to the project theme, I can apply that to every single model I have worked without a blink. This is very handy indeed.
Of those ones, I’d like to use ones with less plasticky look and softer shadow. It looks like I have to give few more tests for shadow.
I will keep reiterating and reiterating until I get it right. In doing so, I will stack huge pile of experimental leftover. But that’s good because all those leftover will contribute to the final one eventually. Cats and dogs are just barely out of brainstorm and no, these are not even going to be used in test. Just not yet. So far, not a single one satisfies me and I think I’ll keep trying until I can hit the eureka moment.
Until then, keep it safe my friend.
update (02/28/11)
With few more trials, I finally come to a result with which I could move on.
The issue with previous renderings were that they all had the plasticky feel. Although I draw characters in a 3D editor, the result should resemble what is drawn by hands on good old 2D space. The new rendering looks a lot better to me.