WordPress es móvil: un vistazo al presente y futuro de WordPress en el móvil

El pasado 2 de Julio estuve en el WordPress Sevilla Meetup hablando sobre WordPress en el móvil. Os dejo aquí la presentación, y algunos enlaces sobre el tema.

Enlaces relacionados:

Eso no es un blog

Lo ví el otro día en Twitter de pasada y hoy he podido verificarlo. La SGAE ha publicado una guía para padres y profesores sobre el buen uso de Internet.

El contenido, como era de esperar, no es más que propaganda contra las descargas de música y cine. Pero lo que ha desatado las alertas de más de uno, y a mi me pone un tanto nervioso es la siguiente perla:

Blog
Abreviatura de «web log», un diario o revista que se publica en Internet. Los blogs a menudo se utilizan para publicar enlaces a  archivos, que pueden ser copias ilegales de música, películas u  otros ficheros multimedia.

Siguiendo esa original perspectiva que tienen estos señores, podríamos definir:

  • Coche: vehículo que a menudo se utiliza para el atropello de peatones
  • Cuchillo: utensilio de cocina a menudo utilizado para cometer asesinatos
  • Manos: extremidad del cuerpo que a menudo se utiliza para estrangular a personas

Sé que suena estúpido, pero la definición original no es que tenga mucho más sentido que mis tontos ejemplos.

Cientos de miles (medio millón sólo en USA) de personas viven de los blogs directa o indirectamente (entre ellos un servidor), pero lo que más me cabrea no es eso. Lo preocupante es que una persona que escribe un blog, les guste o no, es un creador de contenido (véase Autor), y por tanto deberían estar defendiendo sus intereses en lugar de asociarlo por defecto a un acto delictivo.

El problema real

Y volvemos al problema de siempre: hay una gran parte de la gente que descarga sin pagar que lo hace porque no hay otro medio decente. La guía comienza con:

Hay muchas formas de acceder de forma segura y legal a la música, las películas, la televisión y los vídeos en Internet.

¿En serio? Para encontrar música no hay mucho problema, pero ¿y el cine? Será que no se usar la Internet y no las he encontrado. Vamos a seguir leyendo a ver si me enseñan.

En el caso del cine, podrás encontrar  muchas de tus películas favoritas y  seleccionar el formato en el que  quieres verlas, desde DVD y Blu Ray  hasta servicios por Internet. Otra  inicia va es la web Filmotech, donde  están disponibles miles de películas  para su visionado en línea mediante  un sistema de videoclub.

Filmotech, ¿esa es toda la oferta? ¿Y que hay de iTunes? Si encima de que hay poca oferta os dejáis fuera la mitad, no me extraña que la gente no se entere.

Filmotech es una web que, si bien es de las primeras en España, tiene un diseño y usabilidad horrible y un catálogo que da pena. O quizá no, pero eso es lo que aparenta según la portada y lo que uno puede descubrir en un par de minutos navegando por la web.

Filmotech: ¿encuentras algo interesante?

iTunes está bastante mejor pensado (llevan ya muchos años en otros países), pero todavía le falta. Tiene un catálogo decente y es fácil encontrar contenido interesante. También tiene quejas de los usuarios: no hay versiones originales, y algunas películas cuestan lo mismo que el DVD, pero sin extras, otros idiomas, …

iTunes: veo carteles que reconozco

Mi conclusión es la de siempre: dejad de gastar dinero insultando a vuestros potenciales clientes (tanto público como creadores de contenido), en invertid en una plataforma en condiciones para que el que quiera pagar pueda hacerlo. Hasta entonces no tenéis derecho a quejaros: no es que yo no os compre, es que no estáis vendiendo.

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.

Como instalar WordPress de forma más segura

Foto de David M. Goehring

Aviso: este artículo esta pensado para aquellos que tengan su propio servidor. Si no tienes acceso de administrador, ni puedes configurar apache a tu antojo, la utilidad de esto es limitada (aunque puedes encontrar algún consejo interesante)

Hace un tiempo, me cansé de los problemas de seguridad con mi instalación de WordPress. Mantengo varios blogs, y a menudo eran víctimas de ataques. La razón principal es que es costoso mantenerlos actualizados si no se utiliza la actualización automática.

Para que la actualización automática de WordPress pueda funcionar hay dos opciones:

  1. Que apache tenga permisos de escritura sobre todo el árbol de WordPress
  2. Usar FTP, o SSH

La primera opción creaba más problemas de los que solucionaba, y la segunda requería una cierta configuración en el servidor: tener un servidor de FTP, o instalar la extensión de PHP para usar ssh.

Paso 0: migrar de servidor

En realidad no es necesario. En mi caso, y tras encontrar múltiples puertas traseras en mi antiguo servidor, decidí empezar de cero. Instalé versiones limpias de WordPress e importé el contenido y los temas con cuidado (mucho menos costoso que revisar todos los archivos). También aproveché para cambiar todas las contraseñas: no podía estar seguro de que no estuvieran comprometidas.

Además, el momento decisivo fue cuando descubrí que Linode, mi proveedor de hosting, ahora ofrecía alojamiento en Europa (Londres).

Paso 1: organización de wordpress y permisos

La forma más segura de instalar wordpress (en cuestión de permisos) es no permitir que el servidor web pueda escribir en ningún sitio. Esto no es práctico, ya que nos deja sin poder subir ficheros, actualizar wordpress, y otras comodidades. Habrá que encontrar un punto medio.

En lugar de tener wordpress en un solo directorio, separo el fichero wp-config.php y el directorio wp-content. Esto no ofrece una mayor seguridad, pero facilita las actualizaciones manuales, y la revisión de posibles infecciones.

Pongamos como ejemplo:

  • /srv/www/ejemplo.com – directorio base
  • /srv/www/ejemplo.com/htdocs – instalación de wordpress
  • /srv/www/ejemplo.com/wp-config.php – fichero de configuración
  • /srv/www/ejemplo.com/wp-content – datos de wordpress

Para asegurarnos el buen funcionamiento, enlazamos wp-content y wp-config.php dentro de htdocs. El proceso para instalar un nuevo blog sería algo así:

cd /srv/www
wget http://wordpress.org/latest.tar.gz
tar zxvf latest.tar.gz
rm latest.tar.gz
mv wordpress htdocs
mv htdocs/wp-content .
cp htdocs/wp-config-sample.php wp-config.php
cd htdocs
ln -s ../wp-config.php wp-config.php
ln -s ../wp-content wp-content

Ahora queda cambiar los permisos. Supongamos que nuestro usuario en el sistema es usuario y el usuario con el que se ejecuta apache es www-data.

chown -R usuario /srv/www/ejemplo.com
chown -R www-data /srv/www/ejemplo.com/wp-content/uploads

Sólo necesitamos que apache pueda escribir en el directorio donde se suben los adjuntos. Para las actualizaciones usaremos FTP con nuestro usuario.

Paso 2: configuración de WordPress


<?php
// ** MySQL settings ** //
define('DB_NAME', '****');    // The name of the database
define('DB_USER', '****');     // Your MySQL username
define('DB_PASSWORD', '****'); // ...and password
define('DB_HOST', 'localhost');    // 99% chance you won't need to change this value

$table_prefix  = 'xxx_'; // No usar wp_ evita muchos de los exploits automáticos
define('WP_SITEURL','http://www.ejemplo.com');
define('WP_HOME','http://www.ejemplo.com');
define('WP_CONTENT_DIR', '/srv/www/ejemplo.com/wp-content' );
define('WP_CONTENT_URL', 'http://www.ejemplo.com/wp-content');

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

// Entramos en http://api.wordpress.org/secret-key/1.1/ y generamos unas nuevas
define('AUTH_KEY',        't3j$Fk<4BOt=^}SK-GnunxGYNx:6Le|HYEw06O0Lu,9rLm/SMOl2-6h2iItw.tf(');
define('SECURE_AUTH_KEY', '9QQNc;namb%I|xpv*g~7)1ci5X.z9hc3./J-SyT{V64NC I~*W_T+Y<|TT@n&Zs+');
define('LOGGED_IN_KEY',   '=G*+; 4=u%41e]o;)#V/|-v8Y=.ilK1sO6S(!n4z/M0rE(UYhd[_z*HNhjDSp}YR');
define('NONCE_KEY',       '8aUPH}vy$mb,3As}aZY)Lmr_2Qw|B6mb8ivV[!(h7T3$0ENpVLvABhkK0s<IOxel');

// Si queremos wordpress en español. Habrá que instalar también la traducción
define ('WPLANG', 'es_ES');

/* That's all, stop editing! Happy blogging. */

//define('ABSPATH', dirname(__FILE__).'/');
define('ABSPATH', '/srv/www/ejemplo.com/htdocs/');
require_once(ABSPATH.'wp-settings.php');
?>

Revisemos algunos de los parámetros:

  • FORCE_SSL_LOGIN: Fuerza que los usuarios se identifiquen mediante conexión segura
  • FORCE_SSL_ADMIN: Todo el panel de administración funciona mediante conexión segura

Como vamos a usar FTP para las actualizaciones, no queremos que cuando wordpress nos pregunte nuestra contraseña se transmita sin cifrar. Por eso restringimos todo el panel de administración, y no solo el login.

Por supuesto, esto requiere configurar apache para que pueda servir nuestro blog de forma segura, pero eso queda ya para otro artículo.

También necesitamos un servidor de FTP funcionando. En mi caso instalé vsftpd sin mucha complicación.

¿Paso 4?

¿Tienes algún truco para hacer wordpress más seguro? ¿Algún plugin? Cuéntanoslo en un comentario.

Dos fondos de pantalla de regalo

Hace ya tiempo que quería compartir esto. El primero es mi fondo actual. La foto es de un paisaje aragonés, cerca de Fuendetodos (si la memoria no me falla). El segundo es uno de los tantos e impresionantes lagos de Finlandia. Espero que os gusten.

Peace

Descargar Peace:

Finnish nature

Descargar Finnish nature: