jueves, 26 de mayo de 2011

Unidad Editorial enriquece su kiosco digital Orbyt con revistas diseñadas específicamente para iPad

El grupo Unidad Editorial continúa ampliando la oferta de su kiosco de publicaciones de Orbyt, su portal de contenidos de pago. De este modo, los suscriptores a esta plataforma pueden ya disfrutar de tres revistas: Yo Dona, Fuera de Serie y Telva. Las tres publicaciones se pueden ver en iPad.

Para su lectura en iPad las tres revistas cuentan con un rediseño especialmente pensado para este soporte, por lo que incluyen elementos que le otorgan un importante valor añadido, tales como vídeos, HTML5, tiras de apoyo, audios, galerías de imágenes, hot spots, ventanas flotantes… De este modo, el lector de estas revistas puede descargarse la aplicación, a través de la App Store, y vivir una nueva experiencia a la hora de disfrutar de estas tres publicaciones.

Desde ProtecMobile estamos satisfechos de haber colaborado muy activamente para hacerlo posible.

miércoles, 18 de mayo de 2011

La guerra por los juegos sociales se expande a las plataformas móviles.

La semana pasada ocurrió un hecho importante, el argentino Ricardo Quesada, creador del motor de juegos Cocos2D para iOS, y su brazo derecho, Rolando Abarca, fueron contrados por la empresa Zynga tal y como podemos ver en: Major contributors to cocos2d for iPhone joining the Zynga team.

Literalmente miles de juegos han sido hechos con Cocos2D, aquí una lista incompleta. Algunas decenas de ellos han conseguido entrar en el Olimpo de los Dioses, también conocido como el “Top de pago” (Top-Grossing en EEUU), haciendo muy felices a sus autores.

Ahora bien, en un día de Mayo del 2011, 3 aplicaciones del Top fueron juegos hechos con Cocos2D (2 de ellos de una pequeña empresa), pero además de ello, estos juegos caían dentro de la categoría de juegos sociales. Siendo gratuitos estaban en el Top por ingresos, mostrando de forma evidente el potencial de los micro-pagos en juegos sociales. Aquí está el Top de ese día.

Es obvio que Zynga sabe que los juegos sociales mueven enormes cantidades de dinero a través de micro-pagos por comprar objetos y publicidad, además de tener un fuerte crecimiento, y con la contratación del creador de Cocos2D y su compañero, es obvio cuales son las intenciones de Zynga en el futuro respecto a las plataformas móviles.

¿Deseas aprender más sobre los juegos sociales? Viendo la conferencia El Estado de la Industria de Social Gaming aprenderás todos los conceptos básicos:


¿Sabes hacer pequeños juegos pero te falta la infraestrutura necesaria?
Puedes empezar leyendo sobre Amazon Web Services aplicado a juegos sociales, usado por Zynga en sus juegos en. Y algunos otros servicios como RightScale, usado por Zynga para ayudar a escalar los sistemas.

Si ya dominas de todo esto (juegos, Cocos2D, la nube...), y además vives por San Francisco, entonces la empresa Pocket Gems, creadora del Tap Pet Hotel y Tap Zoo, te está buscando.

viernes, 29 de abril de 2011

Orbyt, app de la semana para iPad

Orbyt ha sido destacada por Apple como app de la semana para iPad.


En ProtecMobile, como desarrolladores de la aplicación, estamos especialmente orgullosos de este reconocimiento. Pero más orgullosos estamos de que la aplicación está situándose día tras día dentro de las primeras posiciones en el ránking de aplicaciones por ingresos, lo cual supone la confirmación del acierto que supone la apuesta realizada por Unidad Editorial.

jueves, 14 de abril de 2011

¡¡Quiero comprar desde el sillón!!

El otro día se me fundió una bombilla en casa. Era la cuarta en una semana. Pertenecía al kit de bombillas de la ferretería del barrio, baratísimas y malísimas. He aprendido, no vuelvo a comprar en esa tienda. Aunque tengo “tropecientas” decidí que no iba a sustituirla por otra bombilla cutre de esas, ya que me supondría tener que recambiarla a los 15 días. Decidí que compraría bombillas de led de bajo consumo, que parece que son un auténtico chollo en lo que ahorro energético se refiere.

Eran las 10:00 de la noche y me dije, seguro que hay algún negocio on line que se dedica a ello y además me lo lleva a casa. No tengo disponibilidad para ir a la tienda cuando están abiertas, ya que coincide con mi horario de trabajo. Navegué en dos o tres páginas en mi iPad. Me resultaba incómodo hacerlo a través del Safari, estando acostumbrado a hacerlo a través de aplicaciones nativas para iPad. Ya ves, me he vuelto así de pijo, es fácil acostumbrarse a lo bueno.

El resultado es que de momento no he comprado esas estupendas bombillas de led, simplemente porque no hubo nadie para vendérmelas como yo quería. No estamos hablando de un problema de precio, ni de calidad. El problema es que después de todo el día delante del ordenador, me niego a comprar bombillas delante del ordenador, cuando la maravillosa alternativa del iPad me ofrece una manera mucho más agradable de realizar una compra. Al igual que yo existen un buen conjunto, en aumento, de personas acostumbradas a hacer uso de aplicaciones nativas en iPad, por lo que el primer portal de venta de bombillas que cree una buena aplicación nativa para iPad, estoy convencido que tendrá una importante ventaja competitiva.

Si además de hacer una aplicación para mostrar el catálogo de bombillas y realizar la transacción, ésta incluyese información sobre la tecnología, beneficios e inconvenientes de cada una de ellas, así como una utilidad para comparar el ahorro en función de la tarifa eléctrica o algo similar, estoy convencido que hubiese comprado unas cuantas bombillas y además hubiese recomendado esa aplicación a muchos usuarios de iPad (a todos nos gusta presumir de nuestras sabias decisiones) que hubiesen supuesto más compras aún.
Es probable que muchas empresas de comercio electrónico piensan que aún no hay suficiente base instalada como para rentabilizar la creación de una aplicación de estas características, pero porque no se han planteado qué inversión tendrían que hacer y en cuanto tiempo la amortizarían, así como analizado las tendencias en el acceso a internet. Entonces, estoy convencido, serían conscientes de que adaptarse a un nuevo canal nunca había resultado tan rentable y tan rápidamente amortizable.

Lo veremos con el tiempo, pero al igual que a primeras empresas y negocios que supieron hacer uso del canal internet les supuso éxito, quien sea el primero en hacer uso correcto del canal móvil tendrá éxito (como ya le está sucediendo a Zara con su tienda online, por ejemplo).

sábado, 19 de febrero de 2011

NSEntityMigrationPolicy: cuando la migración automática de CoreData no es suficiente

Uno de los mecanismos que nos ofrece iOS para almacenar datos localmente es CoreData, un framework de alto nivel para el acceso a bases de datos SQLite locales.
CoreData basa su funcionamiento en la definición de data models en los que se describen entities y relaciones entre ellas; cada entity del modelo de datos se corresponde con una clase de nuestro modelo de objetos que extienda NSManagedObject en lugar de NSObject. En la base de datos podremos almacenar diversas instancias de cada tipo de entity con sus relaciones.

Es muy común que al actualizar una aplicación que use CoreData, la nueva versión incluya cambios en el modelo de datos y dichos cambios requieren efectuar un proceso de migración en los datos almacenados durante la ejecución de la versión anterior de la aplicación. CoreData ofrece mecanismos para poder realizar dicha migración de forma automática en casos en los que los cambios en el modelo de datos sean sencillos: nuevos atributos en una entidad, cambio de nombre de una entidad, etc. Simplemente creando un mapping model podemos definir las correspondencias básicas entre las dos versiones del modelo de datos.

Sin embargo hay veces que los cambios en el modelo de datos son tales que el mecanismo de actualización automática no puede lidiar con dichos cambios y debemos proveer a CoreData de la implementación de los pasos de la migración que no puede efectuar de forma automática extendiendo la clase NSEntityMigrationPolicy. Dicha clase tiene diferentes selectores que se ejecutan durante las diferentes fases de la migración del modelo de datos.

Un caso concreto en el cual, sorprendentemente, CoreData no es capaz de ejecutar la migración de forma automática es cuando tenemos un modelo de datos en el cual tenemos entidades que heredan de otras que podríamos llamar entidades abstractas. Supongamos, por ejemplo, que tenemos un modelo de datos con dos entidades: Persona y Empleado. Persona tiene dos atributos de tipo NSString: nombre y apellidos. Empleado tiene un atributo de tipo NSDate: fecha de antigüedad. Si queremos migrar a un nuevo modelo de datos en el cual cambiamos el nombre de la entidad Empleado a Trabajador y el de su atributo fechaAntiguedad a fechaContratacion necesitamos implementar nuestra propia NSEntityMigrationPolicy para migrar las entidades Empleado de la forma que sigue:


#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface EmpleadoMigrationPolicy : NSEntityMigrationPolicy {

}

@end

@implementation EmpleadoMigrationPolicy

// este método crea la instancia de la nueva entidad a partir de la antigua
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error{
// creamos la instancia de la nueva entidad
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:[mapping destinationEntityName] inManagedObjectContext:[manager destinationContext]];
        // obtenemos el valor de los atributos 
id fechaAntiguedad=[sInstance valueForKey:@"fechaAntiguedad"];
id nombre=[sInstance valueForKey:@"nombre"];
id apellidos=[sInstance valueForKey:@"apellidos"];

        // asignamos el valor de los atributos a la nueva entidad
[newObject setValue:fechaAntiguedad forKey:@"fechaContratacion"];
[newObject setValue:nombre forKey:@"nombre"];
[newObject setValue:apellidos forKey:@"apellidos"];
       // asignamos la nueva instancia como destino de la antigua
[manager associateSourceInstance:sInstance withDestinationInstance:newObject forEntityMapping:mapping];
return YES;
}

@end


En el código podríamos haber hecho cualquier tipo de manipulación para migrar la entidad, tal como fundir el nombre y los apellidos en un único atributo. Lo único que faltaría es definir en el mapping model nuestra clase EmpleadoMigrationPolicy como Custom Policy para la entidad Empleado.

Core Data Model Versioning and Data Migration Programming Guide

jueves, 17 de febrero de 2011

@synthesize: deja que el compilador haga el trabajo

Es comúnmente conocido que cuando en una clase de Objective-C declaramos una propiedad, usando dentro de la implementación la sentencia @synthesize indicamos al compilador que debe generar los selectores para modificar y consultar el valor de dicha propiedad (getter y setter).

Dada la siguiente declaración de una clase


@interface RootViewController : UITableViewController {
    NSDate *timestamp;
}

@property (nonatomicretainNSDate *timestamp;


si en la implementación añadimos la siguiente sentencia

@synthesize timestamp

el compilador generará automáticamente los siguientes selectores


- (NSDate *)timestamp
{

    return timestamp;
}
- (void)setTimestamp:(NSDate *)newValue
{
    if (timestamp != newValue)
    {
        [timestamp release];
        timestamp = [newValue retain];
    }
}


Esto es ciertamente una gran ayuda que nos ahorra escribir unas cuantas líneas de código y la posibilidad de equivocarnos.
Pero lo que muchos desarrolladores no saben es que la sentencia @synthesize también nos ahorra tener que declarar la ivar en el interface de la clase, de forma que dicho interfaz bastaría con ser definido de la siguiente forma


@interface RootViewController : UITableViewController {
}

@property (nonatomicretainNSDate *timestamp;


Eso sí, de lo que no nos salva esto es de hacer release en el dealloc de la clase, ya que se trata de una propiedad retain.

Algunas consideraciones a tener en cuenta al desarrollar aplicaciones de medios

Keny Armosh, autor de App Savy, analiza 5 puntos clave a la hora de afrontar la implantación de aplicaciones móviles de medios de comunicación.
Especialmente interesante el análisis que hace de las disyuntivas web móvil vs app nativa y frameworks estándar vs desarrollos a medida: el presupuesto muchas veces manda, pero al final llama la atención sobre un punto importante a la hora de analizar los costes:
An oft asked question is if spending tens of thousands of dollars for a media application is going to result in an actual return on investment. As a good consultant, my response to this question is with a question, “Can you afford not to invest tens of thousands of dollars in the most explosive market in the economy?”
Pues eso... ¿puedes permitirte el lujo de quedarte fuera?

Outlook: Considerations for Developing Media Applications