Categories
Main

Thanksgiving Sale on iMandala for iPad/iPhone

iMandala - Mandala and Seed Syllabe Meditation

If you would like to have a special Thanksgiving Day, what is more advisable than initiating your self to the art of meditating? And what is better than using some clever app and your iPad/iPhone to achieve surprising results?

You can try iMandala at 40% of its regular price. Just check it.

Categories
Main

dic:ph English Spanish Dictionary for the iPhone

Just to revive this blog, some advertisement blurb on my latest app.

Another release in the dic:ph series, dic:ph English Spanish is a novel concept of multidictionary for the iPhone providing:

  • dictionary definition for English words;
  • dictionary definition for Spanish words;
  • translation from/into Spanish/English;
  • conjugation table for Spanish verbs.

dic:ph is your perfect companion if you are aiming at improving your English or Spanish skills. You can read more about it in our product page for dic:ph.

It is available on the App Store.

Categories
Main

dic:ph 1.2 soon available from the App Store

Only a few days remains before dic:ph 1.2 becomes available on the App Store.

Dic:ph is a novel concept of multilingual dictionary for the iPhone. You can read about it here.

Dic:ph includes several improvements offer a better user experience:

  • tap-to-search: tap any word in any result view to automatically look it up;
  • larger fonts for easier reading;
  • improved parsing of results;
  • recent searches are cached locally;
  • even faster.

As usual, upgrade is free and almost automatic for all current users!

Categories
Main

iMandala available on the App Store

iMandala is the new app for iOS that you can find on the App Store.

iMandala combines time-proven meditation techniques such as mandala and seed syllable visualization, with the soothing sound of Tibetan Bowls and Gongs, and with subtle and relaxing visual effects.

Mandalas and seed syllablesSeed Syllables in iMandala (Bīja) are employed in several spiritual traditions as a support to meditation and to convey a deeper meaning that is not attainable through the rational mind.

Mandalas have spiritual and ritual significance in Hinduism and Buddhism. Aside from aiding in meditaion, they are used to establish a sacred space and as a spiritual teaching tool.

Fully exploiting the powerful graphical capabilities of the iPad and the iPhone, iMandala adds visual effects to such visualizations in an attempt to make them more effective at capturing your focus and make your mind more present and less prone to distractions. Depending on your state of mind and your personal preference, you can choose whether the visual effect is stronger or lighter. iMandala is fully functional on the iPhone, too, but it really shines on the larger screen of the iPad.

Sounds will guide you through the meditation by playing a gong or a tibetan bowl sound at fixed time intervals; you can also choose how many repetitions you would like to have.
The discrete use of sound will help you to relax, since you don’t have to worry about the time passing, while also giving you another means to refocus in case you lost your attention.

If you are not an experienced practitioner of meditation, you can get more benefit from iMandala sounds if you choose a shorter repetition timeframe.

As usual, follow a set of basic guidelines when you are about to meditate: find a peaceful and quiet place; get comfortable; assume a correct position and relax your body; breathe.

iMandala aims to be a project open to the feedback from its users. If you would like to have any of iMandala features further developed, please send an email to us.

Categories
Main

App Store: it’s a hard life

It may come as a bit of a shock to many, but the truth was already known to most independent developers for iOS: the App Store is a really hard environment to live in. This has been lately confirmed in some new figures released by mobile analytics firm Adeven, which speak of almost 400.000 (i.e., 80% of all apps) “zombie” apps: apps that are seldom, if ever, downloaded. Here what TUAW says about it:

[only] a few companies with a lot of experience, brand recognition and marketing money are able to catapult their products up into the Top 25, where they’re usually profitable as long as they can sit there.

This is definitely true, so, when I found this list of beautiful iOS app web sites, I could not resist the curiosity of checking with Xyologic stat engine how much a beautiful site can help an app.

Well, I will leave the detailed task for yourself, since it would be pretty hideous to highlight the not-so-good results of some nice and well-done apps, which fellow independent developers put a lot of effort and time into, but it seems pretty obvious that with several of them ranking below the 10k downloads overall, a nice app web site is not the most important thing to have.

Categories
Main

Calculate CPU usage for iOS

I have recently needed to monitor how much CPU is used by a graphics-intensive app I am developing. Instruments is a wonderful tool to find out performance bottlenecks in your code, but in many cases simply monitoring cpu usage allows for an easier way to find out what is going on (possibly in an unexpected way) in your app.

Collecting this kind of information requires getting to the mach-subsystem but in the end it is not so difficult to set up. Much of the information I needed to accomplish this came from the extremely interesting, though not 100% up-to-date, Mac OS Internals: A Systems Approach, by Amit Sing.

You can find the code on my github.

Categories
Main

A bug in the Dropbox app for iOS?

Try this:

  1. launch your Dropbox app on the iPhone/iPad and log in;
  2. go to your computer and browse to the Dropbox settings to change your account password;
  3. go back to your iPhone/iPad and… surprise, you are still allowed to browse through your documents…

So, if you loose your iPhone, no need to rush to change your account password to protect your files from undesired access. This will not do nothing.

The only protection you have is the 4 digits passcode that you can set in the Dropbox app.

Is this enough security for sensitive information?

I suspect this issue is common to many systems using oAuth or other similar long-lived access token mechanisms. But why should it be hard to invalidate all tokens associated to an account when the account password is changed?

 

Categories
Main

Blur effect for Cocos2D textures on retina displays

I have recently needed to blur a Cocos2d texture to simulate an “out-of-view-field” effect. As it usually happens, it had been already implemented under the name of AWTextureFilter by Manuel Martínez-Almeda, who made it available on github.

Integrating it into my app was really easy, but it turned out that there was a problem with @2x textures on retina displays, both iPhone and the new iPad. So, I just fixed this and published a https://github.com/sdesimone/AWTextureFilter“>fork for anyone who would like to use it.

 Update 27 May:

Due to the lengthy calculations that AWTextureFilter does, it can be pretty slow and block your UI for up to a couple of seconds. Lengthy calculations scream for background execution, but the stock version of AWTextureFilter will not work correctly when executed on a secondary thread due to it eventually calling the Open GL layer.
So I made some changes to blur method and it is now possible to create a blurred texture off the main thread; this will not block the UI. I hope you enjoy it.

Categories
Main Tutorials

cocos2d and the new retina iPad – take 2

I described in a previous post about cocos2d and the new retina iPad a quick solution to the problem of supporting higher-resolution images. The main objective of that work was to make easier re-building your app for submission on the App Store before  you could possibly provide higher-resolution images for the new iPad. I mentioned anyway that that approach was just a quick hack and not  a full answer to the need to provide 4 (four!) different versions for any of your artworks.

Now, I would like to quickly describe a different approach aimed at reducing that number to 2 (if you are willing to discontinue support for older iPhones and iPods, up to the iPhone 3GS/iPod Touch 3G). This is possible by:

  1. providing a “@2x” (aka “-hd”) version;
  2. providing a “@2x-ipad” (aka “-hd-ipad”) version;
  3. making the non-retina iPads (iPad 1 and 2) use the “@2x” version by default.

This is made possible through a new category I wrote that you can add to your project to transparently get the behavior described above.

The code

As you can see, the changes are pretty trivial. The only thing you have to do is inspect the two constants defined at the beginning of the file to check that file suffixes are ok with your conventions.

[sourcecode]

//
// CCFileUtils+SDSDeviceSuffix.m
// MantraPhoneTest
//
// Created by sergio on 3/19/12.
// Copyright 2012 Sergio De Simone, Freescapes Labs. All rights reserved.
//

#import "cocos2d.h"

#define CC_IPAD_DISPLAY_FILENAME_SUFFIX @"~ipad"
#define CC_RETINA_IPAD_DISPLAY_FILENAME_SUFFIX @"-hd~ipad"

#ifdef CC_RETINA_IPAD_DISPLAY_FILENAME_SUFFIX

//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
@implementation CCFileUtils (SDSDeviceSuffix)

//////////////////////////////////////////////////////////////////////////////////////////////
+ (NSFileManager*)localFileManager {
static NSFileManager *__localFileManager = nil;

if (!__localFileManager)
__localFileManager = [[NSFileManager alloc] init];
return __localFileManager;
}

//////////////////////////////////////////////////////////////////////////////////////////////
+ (NSString*)getPathForSuffix:(NSString*)path suffix:(NSString*)suffix {

NSString *pathWithoutExtension = [path stringByDeletingPathExtension];
NSString *name = [pathWithoutExtension lastPathComponent];

//– check if path already has the suffix.
if( [name rangeOfString:suffix].location != NSNotFound ) {

CCLOG(@"cocos2d: WARNING Filename(%@) already has the suffix %@. Using it.", name, suffix);
return path;
}

NSString *extension = [path pathExtension];

if( [extension isEqualToString:@"ccz"] || [extension isEqualToString:@"gz"] )
{
// All ccz / gz files should be in the format filename.xxx.ccz
// so we need to pull off the .xxx part of the extension as well
extension = [NSString stringWithFormat:@"%@.%@", [pathWithoutExtension pathExtension], extension];
pathWithoutExtension = [pathWithoutExtension stringByDeletingPathExtension];
}

NSString *retinaName = [pathWithoutExtension stringByAppendingString:suffix];
retinaName = [retinaName stringByAppendingPathExtension:extension];

if( [[self localFileManager] fileExistsAtPath:retinaName] )
return retinaName;

CCLOG(@"cocos2d: CCFileUtils: Warning HD file not found (%@): %@", suffix, [retinaName lastPathComponent] );

return nil;
}

//////////////////////////////////////////////////////////////////////////////////////////////
+ (NSString*)getDoubleResolutionImage:(NSString*)path {

#if CC_IS_RETINA_DISPLAY_SUPPORTED

NSString * retinaPath;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

if (CC_CONTENT_SCALE_FACTOR() == 2) {
if ((retinaPath = [self getPathForSuffix:path suffix:CC_RETINA_IPAD_DISPLAY_FILENAME_SUFFIX])) {
return retinaPath;
} else if ((retinaPath = [self getPathForSuffix:path suffix:CC_IPAD_DISPLAY_FILENAME_SUFFIX])) {
return retinaPath;
} else if ((retinaPath = [self getPathForSuffix:path suffix:CC_RETINA_DISPLAY_FILENAME_SUFFIX])) {
return retinaPath;
}
} else {
if ((retinaPath = [self getPathForSuffix:path suffix:CC_IPAD_DISPLAY_FILENAME_SUFFIX])) {
return retinaPath;
} else if ((retinaPath = [self getPathForSuffix:path suffix:CC_RETINA_DISPLAY_FILENAME_SUFFIX])) {
return retinaPath;
}
}

} else {

if (CC_CONTENT_SCALE_FACTOR() == 2) {
if ((retinaPath = [self getPathForSuffix:path suffix:CC_RETINA_DISPLAY_FILENAME_SUFFIX])) {
return retinaPath;
}
}
}

#endif // CC_IS_RETINA_DISPLAY_SUPPORTED

return path;
}

@end

#endif

[/sourcecode]

 

It is available on github and free for your use.

Categories
Main

Review: iPoe for the iPad/iPhone

As a follow up to this old post of mine about interactive books for the iPhone/iPad, I would like to mention a new entry in the field: iPoe.

iPoe is a beautiful collection of 3 of Poe’s unforgettable masterpieces: The Oval Portrait, The Tell-tale Heart, and the Mask of the Red Death; all enriched with a biography and an highly valuable extra section, The Sketchbook, documenting the creative process by graphic artist David Garcia Forés. iPoe is the second attempt of PLAY Creatividad, a creative firm based in Barcelona, at making an interactive books, after Forgotten Colors, their initial project. To have a glimpse of the beauty of this app, I suggest you to have a look at the trailer on the iPoe site.

One thing that must be positively stressed is the shift from the format of an HTML book, packed into an app (through the Baker Framework), to a Cocos2D-based app. This surely adds smoothness and richness to the animation and interactive effects that the app offers and also reduces a lag that somehow affected the user experience with Forgotten Colors. The app mixes “plain text” pages with richer pages including graphics and animations, often of the interactive kind. Apart from a few glitches with the user experience (sometimes double tapping brought me on the previous page, other times not; at times just swiping randomly on the graphics also produced the same effect of turning page; also, swiping to change page does not work satisfactorily; furthermore, when you select a story to read, the app brings you always at the first page, although you left reading on a different page, etc) that can be surely improved upon, what I always find interesting to look at is <i>how the interactivity aspect enriches the reading experience<i>.

Now, after looking at several apps implementing interactive books, it is clear that one must distinguish the first time the interactive book is read.

The first time, the app offers a discovery experience, where at each page you could/would/should discover which effects the designer decided to embed there; sometimes they reveal themselves automatically, other times you have to actively look for them in several possible ways (touching the graphical artifacts, playing with the accelerometer etc.) This may result in a more or less pleasant kind of experience depending on many factors, including the mood  at the time of reading, but mostly the age of the reader. I have noticed that children are really keen on how they can affect the story they are reading, and also like repeating the same discovery experience several times. For me, I am always impressed by the creative aspects of the animations and the effects, and sometimes puzzled at the novelty or originality of the view that is conveyed by the graphics over the text. Yet, I have to say that it seems really difficult to find a formula that makes interactivity add a value to a book such that it makes it an integral part of the reading experience. One factor here is that of a balance between the intrusiveness of the animation/interaction aspect and the fact that they always repeat in the same way.

All in all, I feel that we are still at the dawn of the interactive book era and that much has to be found out as to how the reading experience can be enriched through animations and interactivity for different age targets.

Apart from that, I think that iPoe is a wonderful app, and if you like Poe, or have never read his stories and feel like trying some, iPoe offers you a great value for little money.

Check out iPoe on iTunes: iPoe – The Interactive and Illustrated Edgar Allan Poe Collection.