Trabajando para Automattic

Hoy hace más o menos una semana que pasé a formar parte del equipo de Automattic. Tras un periodo de prueba, Matt me dio las buenas noticias.

Como todos los nuevos empleados, mis primeras tres semanas son de soporte, algo que me está resultando muy interesante: se aprende mucho enseñando.

Tras este periodo inicial, trabajaré en la aplicación para iPhone e iPad WordPress for iOS. La había probado en varias ocasiones aunque no soy un usuario frecuente, ya que suelo escribir con poca frecuencia, y normalmente desde el ordenador. Pero ya veremos a partir de ahora.

Llevo poco tiempo así que no puedo dar muchos detalles, pero de momento me está encantando. Me gusta la forma de trabajar y el equipo es genial.

Seguiremos informando.

La cámara del iPhone 4: espectacular

El pasado mes compré un iPhone 4. Llevaba algo más de 3 años con mi iPhone 2G, y aunque funcionaba correctamente, la pantalla comenzaba a fallar, el conector hacía tiempo que era inestable y, sobre todo, no podía actualizarlo a iOS 4.0. Pretendiendo dedicarme a desarrollar aplicaciones para iPhone, esto era un problema considerable.

La pantalla genial, tener 3G y GPS también, pero la gran sorpresa ha sido la cámara, probablemente mejor que muchas compactas.

Tanto es así que en las últimas vacaciones apenas saqué la camara reflex de la mochila. Después de haber hecho unas 10.000 fotos en los dos meses anteriores, estaba un poco perezoso para sacar la cámara. Sin embargo, teniendo el teléfono mucho más a mano, saqué unas cuantas fotos.

Con la aplicación Camera+ podía retocarlas en el momento y subirlas en cuanto volviese al wifi del apartamento.

Dificilmente podría describir el resultado con palabras, así que os dejo con algunos ejemplos:

Berlin

Berlin

Berlin

Berlin

Berlin

Berlin

Más en: Berlin – a set on Flickr

Creando un candado multitouch para iPhone (I)

Estrenamos la sección de desarrollo para iPhone con una idea curiosa: cómo imitar un candado de combinación. Sí, uno de esos redondos de taquilla de instituto que salían tanto en TV.

El primer paso es preparar la imagen del candado. Cómo lo importante en este caso era experimentar con el código, y comprobar cómo de fácil resultaba implementar dicho candado, los graficos son un tanto cutres, pero cumplen su papel.

La parte fija del candado (Lock_fixed.png)

La parte movil del candado (Lock_mobile.png)

Una vez tenemos las imágenes, crearemos un proyecto nuevo en Xcode: “Window-based application”, y para este ejemplo lo llamamos “CandadoVisual_1″.

Añadimos las imagenes a la carpeta “Resources” haciendo click con el boton derecho, “Add -> Existing files…”, y despúes de seleccionar las imagenes nos aseguramos de marcar “Copy items into destination group’s folder (if needed)“.

En el archivo “CandadoVisual_1AppDelegate.h”, nos encontramos lo siguiente:

@interface CandadoVisual_1AppDelegate : NSObject <UIApplicationDelegate> {
 UIWindow *window;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

Debemos añadir un outlet para la parte móvil, para que podamos girarla.

@interface CandadoVisual_1AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UIImageView *mobileLock;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UIImageView *mobileLock;
@end

El paso siguiente es configurar la interfaz. Hacemos doble click en “MainWindow.xib”, y se abrirá Interface Builder. Los siguientes pasos consisten en:

  1. Añadir una UIImageView con la parte fija del candado.
  2. Añadir una UIImageView con la parte móvil del candado justo encima de la parte fija.
  3. Conectar la parte móvil con el outlet que acabamos de crear.
  4. Habilitar los gestos multitouch en la parte móvil.

 

Primera imagen (320x320)

Configuramos el nombre de archivo

Colocamos la segunda imagen sobre la primera

Configuramos la conexion con el delegado

Habilitamos los gestos múltiples: nos aseguramos que las casillas "User Interaction enabled" y "Multiple Touch" estan marcadas

Ya podemos cerrar Interface Builder y volver a Xcode. En este primer artículo sólo vamos a ver como captar gestos múltiples, así que de momento crearemos todo el código en el App Delegate, por mantener la simplicidad.

Vamos a estar trabajando con ángulos, así que añadiremos las siguentes macros al principio de CandadoVisual_1AppDelegate.m, justo después del #import:

#define DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) / 180.0 * M_PI)
#define RADIANS_TO_DEGREES(__RADIANS__) ((__RADIANS__) * 180 / M_PI)

Las librerías de iPhone trabajan con ángulos en radianes, pero para que sea más fácil de comprender especificaremos los ángulos en grados y los convertiremos cuando sea necesario.

Lo fundamental es obtener los datos multitouch para saber cuando el usuario esta “girando” el candado. Antes, tendríamos que haber capturado los datos de posición de cada dedo por separado y hacer nuestros cálculos, pero desde el iOS 3.2, el SDK proporciona reconocedores de gestos (UIGestureRecognizer), y en concreto el reconocedor de rotación (UIRotationGestureRecognizer), que es el que nos interesa.

Primero, creamos el método al que llamaremos cuando se realice el gesto de rotación (handleRotate):

// Es llamada cada vez que hacemos un gesto de rotacion
- (IBAction)handleRotate:(UIRotationGestureRecognizer *)sender {
// sender.rotation es el angulo relativo desde que empezamos
// a girar, asi que guardamos lo que llevamos girado hasta
// ahora en savedAngle
currentAngle = savedAngle + RADIANS_TO_DEGREES(sender.rotation);

// Cuando el gesto termina (levantamos los dedos),
// guardamos el angulo actual en savedAngle
if (sender.state == UIGestureRecognizerStateEnded) {
savedAngle = currentAngle;
}

// Aplicamos una transformacion de giro a la
// imagen del candado
CGAffineTransform cgCTM = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(currentAngle));
mobileLock.transform = cgCTM;
}

Después, creamos un reconocedor de gestos con este método y se lo asignamos a mobileLock:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
currentAngle = 0;
savedAngle = 0;

// Override point for customization after application launch.
UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)];
[mobileLock addGestureRecognizer:rotationGesture];
[rotationGesture release];

[window makeKeyAndVisible];

return YES;
}

Con esto, ya tenemos un candado que gira. En próximas entregas, veremos cómo asociar el giro a los distintos números de la combinación.

Descarga el proyecto completo: CandadoVisual_1.