Buscando...

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.
Aviso: Este tutorial sólo sirve para la versión de WhatsApp de iOS. Probablemente la forma de cambiar los colores en la versión para Android sea similar, pero no lo puedo asegurar porque no tengo un dispositivo con Android con el trastear.

Cuando escribes en un chat de grupo en WhatsApp, la aplicación asigna automáticamente un color a cada miembro del grupo, de modo que sea fácil saber quién escribe cada mensaje. Sin embargo en algunas ocasiones este color aleatorio no es el más adecuado para el contacto: ¿Un color verde seco para el amor de tu vida y sin embargo un rosa sexy para tu amigo de la infancia? ¡Eso no puede quedar así!

La cuestión es: ¿es posible cambiar los colores que WhatApp asigna a los contactos en los chats de grupo? La respuesta es, a pesar de que la aplicación no lo permita por defecto, aunque es necesario haberle hecho el Jailbreak al dispositivo y disponer de una aplicación para gestionar archivos (iFile o similar).

WhatsApp asigna  a cada contacto con el que mantienes una conversación, un número entero aleatorio, comprendido entre 0 y 18 (tal vez el rango sea mayor, pero en mi lista de contactos sólo hay números entre o y 18), donde cada número se corresponde a un color diferente, de modo que dos contactos con el mismo número tendrán el mismo color en chats de grupo. Esta lista de parejas de números de teléfono e identificadores de colores se almacena en un archivo dentro de la carpeta de documentos de WhatsApp.

La ruta completa a este archivo es:

/var/mobile/Applications/{CARPETA_NOMBRADA_ALEATORIAMENTE}/Documents/Colors.plist

Donde {CARPETA_NOMBRADA_ALEATORIAMENTE} es una carpeta cuyo nombre está compuesto por letras y números aleatorios (seguramente no sean tan aleatorios, pero en cada dispositivo son diferentes). En mi caso la carpeta comenzaba por C4D42785, pero en vuestro caso puede ser completamente diferente. Lo que si será es un nombre largo, formado por muchas letras y números y sin sentido a simple vista.

Dentro de esta carpeta aleatoria encontraremos una carpeta llamada WhatsApp.app. En cuanto veamos una carpeta con un nombre aletorio que en su interior tiene una llamada WhatsApp.app, ya habremos encontrado la carpeta que buscábamos.

Dependiendo del editor que usemos para abrir el archivo, veremos código o una interfaz con las parejas de teléfonos y códigos de color distribuidas a lo largo de una tabla. A continuación teneís un par de imágenes con las dos posibilidades y marcados los números de teléfono y los códigos de color.

Por último queda ver qué color se corresponde a cada identificador. A continuación tenéis una tabla recopilatoria de los 19 colores que WhatsApp ha asignado a mis contactos.

Identifier Color
0  
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

Un carrusel de WP Carousel con Nivo SliderEn principio pensaba liberar WP Carousel 1.1 cuando se liberase WordPress 3.3, pero hace unos días recibí un email del repositorio de plugins de  WordPress.org donde se me pedía que retirara el script StepCarousel por tener una licencia incompatible con GPL (todos los plugins del repositorio deben estar liberados bajo la licencia GPL). Para que no retirasen WP Carousel del repositorio oficial y así facilitar su instalación y actualización con un sólo click, he decidido adelantar el lanzamiento.

Como ha sido algo apresurado, no he tenido tiempo de actualizar la documentación, cosa que haré lo antes posible.

Estos son los principales cambios de WP Carousel 1.1:

  1. Se ha eliminado StepCarousel, a partir de ahora por defecto se usará jCarousel.
  2. Se ha actualizado la pestaña de ayuda con más información y compatible con el nuevo sistema de ayuda de WordPress 3.3.
  3. Se ha resuelto el error que aparecía al usarse un theme que no existía. Ahora se muestra un mensaje de error pero la ejecución de la página prosigue.
  4. Se ha añadido un archivo de configuración para poder mantener la configuración interna de WP Carousel (nombres de las tablas, prioridades de carga, etc) al actualizar WP Carousel. El uso de este archivo está en la pestaña de ayuda.
  5. Se ha añadido una nueva opción interna para mostrar la lista de los últimos artículos en lugar del campo para introducir la ID del artículo cuando se supera el límite de artículos para la lista de artículos de la página de opciones del carrusel.
  6. Se ha eliminado la matriz $log del código, reduciendo consumo de memoria.
  7. Se ha añadido Nivo Slidercomo motor de carruseles. Los themes compatibles con Nivo Slider son diferentes los themes compatibles con jCarousel, y están claramente identificados en el selector de themes: sus nombres comienzan por “Nivo -”.

Podéis actualizar WP Carousel desde el Panel de Administración de WordPress.

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

Icono de Music Maniac Lite 2.0En cuestión de horas estará disponible la versión 2.0.1 de Music Maniac en el AppStore. Esta actualización corrige algunos errores de la versión 2.0, entre los que se encuentran:

  • Un error en la traducción al español.
  • Errores diversos al tener pocas canciones en la biblioteca de iTunes (o pocos metadatos sobre las mismas).
  • Un error que no iluminaba la respuesta correcta al terminar una ronda y no seleccionar ninguna canción.
  • Se ha mejorado el consumo de capacidad de almacenamiento que requiere Music Maniac para guardar ciertas estadísticas.

También incluye otros cambios menores, como que al jugar Offline y salir de un concurso, en lugar de perder los avances, se carga la vista de estadísticas y se guardan los puntos obtenidos durante el tiempo que se jugó.

Además esta actualización también afecta a Music Maniac Lite, pudiendo disfrutar de las novedades de la versión 2.0 en la versión reducida de Music Maniac.

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

Ayer Carmen Parra preguntaba en un comentario cómo se pueden guardar los datos introducidos por el usuario en un archivo. Como el proceso es demasiado largo como para publicarlo en un comentario, he decidido escribir este pequeño tutorial.

NSArray, NSDictionary, NSString, NSNumber, NSData y otros

Resultado del código de ejemploHay dos métodos sencillos para almacenar un objeto en un archivo y poder recuperarlo cuando nos convenga. El primero no se puede aplicar a cualquier objeto, sino a objetos de algunas clases de Objective-C que responden a dos métodos llamados writeToFile:atomically: y writeToURL:atomically:. El uso de estos métodos es muy sencillo, basta con llamarlos en el momento en el que queramos que el objeto se guarde en un archivo.

A continuación teneís un ejemplo comentado. Básicamente creamos una matriz, le añadimos algo de contenido, la imprimimos, la guardamos en un archivo y nos deshacemos de ella. A continuación creamos otra matriz que lea el contenido del archivo y comprobamos que tiene el mismo contenido que la anterior. El resultado que obtendréis será similar al de la imagen de la derecha.

NSMutableArray *array = [[NSMutableArray alloc] init]; // Creamos una matriz
	[array addObject:@"¡Hola"]; // Añadimos un objeto
	[array addObject:@"mundo!"]; // Añadimos otro objeto
	NSLog(@"Matriz original: %@", array); // Imprimimos la matriz original
	[array writeToFile:@"filename" atomically:YES]; // Escribimos en el archivo filename el contenido de la matriz
	[array release]; // Liberamos memoria
	NSMutableArray *arrayFromFile = [[NSMutableArray alloc] initWithContentsOfFile:@"filename"]; // Esta matriz tiene el mismo contenido que tenía la matriz anterior
	NSLog(@"%@", arrayFromFile); // Imprimimos la matriz recuperada del archivo
	[arrayFromFile release]; // Liberamos memoria

Del mismo modo que se puede guardar en un archivo un objeto de la clase NSArray, también se puede usar con objetos NSDictionary, NSString, NSData y NSNumber, entre otros. Sin embargo no se puede usar con objetos de una clase creada por nosotros (en la mayoría de los casos).

Clases creadas por nosotros

Para guardar en un archivo un objeto de una clase creada por nosotros, tendremos que hacer que el objeto sigua el protocolo NSCoding. Tras esto, mediante las clases NSKeyedArchiver y NSKeyedUnarchiver podremos guardar en un archivo y leer de un archivo nuestro objeto. Este protocolo tiene dos métodos necesarios: initWithCoder: y encodeWithCoder:.

Vamos a suponer que hemos creado la clase Empleado, que tiene la siguiente interfaz:

@interface Empleado : NSObject
@property (nonatomic, retain)	NSString	*nombre, *apellidos;
@property						NSUInteger	edad;
@property						BOOL		esEmpleadoDelMes;
@end

Para poder almacenar este objeto en un archivo tendremos primero que hacer que siga el protocolo NSCoding. Modficaremos la interfaz y la dejaremos así:

#define kNombre				@"Nombre"
#define kApellidos			@"Apellidos"
#define kEdad				@"Edad"
#define kEsEmpleadoDelMes	@"esEmpleadoDelMes"
@interface Empleado : NSObject
@property (nonatomic, retain)	NSString	*nombre, *apellidos;
@property						NSUInteger	edad;
@property						BOOL		esEmpleadoDelMes;
@end

Básicamente hay dos cambios: hemos indicado que la clase sigue el protocolo NSCoding y hemos definido una serie de constantes que usaremos más adelante y que entenderéis en seguida su utilidad.

Ahora pasamos a la implementación. Esta es la implementación original de la clase Empleado, antes de seguir el protocolo NSCoding:

@implementation Empleado
@synthesize nombre, apellidos;
@synthesize edad;
@synthesize esEmpleadoDelMes;
- (void)dealloc
{
	[nombre release];
	[apellidos release];
	[super dealloc];
}
@end

Ahora vamos a añadir los dos métodos que necesitamos para seguir el protocolo NSCoding. Estos métodos nos permiten archivar nuestro objeto. El método encodeWithCoder: tiene por parámetro un objeto de la clase NSCoder. En este objeto archivaremos las propiedades del nuestro, asignándole a una serie de claves las propiedades del objeto.

Por ejemplo, si queremos hacer que la propiedad nombre se archive en la clave clave, el método tendría el siguiente aspecto:

- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:self.nombre forKey:@"clave"];
}

No todas las propiedades se archivan de la misma forma. Los objeto se archivan a través del método encodeObject:forKey:, los números enteros se archivan con encodeInteger:forKey: y los valores booleanos con encodeBool:forKey:. Las claves son muy importantes, ya que el método initWithCoder: va a desarchivar el objeto usando las mismas claves para acceder a las propiedades, por eso hemos definido una serie de constantes que serán las claves que usaremos para archivar y desarchivar las propiedades.

Nota: Tenéis una lista de todos los métodos para archivar objetos, así como una explicación del proceso de archivar y desarchivar objetos en la documentación de Apple (en inglés).

Nuestro método encodeWithCoder: quedará así:

- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:self.nombre forKey:kNombre];
	[coder encodeObject:self.apellidos forKey:kApellidos];
	[coder encodeInteger:self.edad forKey:kEdad];
	[coder encodeBool:self.esEmpleadoDelMes forKey:kEsEmpleadoDelMes];
}

El método initWithCoder: es muy similar al anterior, sólo que su funcionamiento es el contrario: a partir de un objeto archivado se obtienen las propiedades y se crea un objeto de la clase Empleado (en este caso) con las propiedades que tenía el objeto al archivarse. En este caso enviaremos el mensaje decodeObjectForKey:@”clave” a coder y asignaremos el valor devuelto a la propiedad de nuestro objeto. De nuevo, se usan métodos diferentes para decodificar número enteros, valores booleanos y otros tipos de variables. Nuestro método initWithCoder: quedará así:

- (id)initWithCoder:(NSCoder *)coder {
    if ((self = [super init])) {
		self.nombre = [coder decodeObjectForKey:kNombre];
		self.apellidos = [coder decodeObjectForKey:kApellidos];
		self.edad = [coder decodeIntForKey:kEdad];
		self.esEmpleadoDelMes = [coder decodeBoolForKey:kEsEmpleadoDelMes];
	}
    return self;
}

Resultado del ejemploAhora pasemos a crear un objeto Empleado, a guardarlo en un archivo y a comprobar que funciona correctamente. Primero incluímos la interfaz de la clase Empleado en el archivo en el que vamos a crear el objeto, en mi caso, y al tratarse de una “Command Line Tool“, lo incluiré en el archivo main.m. El siguiente código comentado crea un objeto de la clase Empleado, le asigna algunos valores sus propiedades, lo archiva y después crea un nuevo objeto con el contenido del archivo en el que se ha guardado antes el objeto:

Empleado *trabajador = [[Empleado alloc] init]; // Creamos el objeto
	trabajador.nombre = @"Juan"; // Le damos un nombre
	trabajador.apellidos = @"García López"; // Unos apellidos
	trabajador.edad = 26; // Una edad
	trabajador.esEmpleadoDelMes = YES; // Y lo hacemos empleado del mes
	NSLog(@"%@ %@ tiene %lu años", trabajador.nombre, trabajador.apellidos, trabajador.edad); // Imprimimos sus datos
	[NSKeyedArchiver archiveRootObject:trabajador toFile:@"empleado"]; // Lo guardamos en el archivo empleado
	[trabajador release]; // Liberamos memoria
	Empleado *trabajadorRecuperado = [NSKeyedUnarchiver unarchiveObjectWithFile:@"empleado"]; // Creamos un objeto a partir del archivo empleado
	NSLog(@"%@ %@ tiene %lu años", trabajadorRecuperado.nombre, trabajadorRecuperado.apellidos, trabajadorRecuperado.edad); // Imprimimos sus datos

Así se puede guardar un objeto de cualquier clase en un archivo, de forma que puede ser recuperado en cualquier momento. Los objetos más complejos pueden necesitar métodos más complejos a la hora de archivarlos. Del mismo modo no se tienen por qué archivar todas las propiedades si no se quiere.

Por último dejo a vuestra disposición los archivos del proyecto que he creado mientras escribía el tutorial, por si os atascáis y necesitáis un empujoncito.

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

Ya está disponible Music Maniac 2.0 en el AppStore como una actualización de Music Maniac. Las novedades ya las resumí hace unos días, que son en definitiva nuevos modos de juego, nueva interfaz, modo multijugador online y otras mejoras que no se pueden resumir en un solo párrafo.

La versión Lite de Music Maniac estará disponible muy pronto.

Página de Music Maniac en Sumolari.com | Galería de imágenes de Music Maniac | Music Maniac en el AppStore.

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

Music Maniac 2.0Music Maniac 2.0 ha sido aprobada en el App Store.  Estará disponible como actualización para todos los usuarios de Music Maniac cuando haya sido aprobada la versión Lite. Mientras tanto, y a falta de unos días (u horas) para que esté disponible esta nueva versión, voy a resumir las principales novedades.

Reescrita desde 0

Esta no es una actualización cualquiera. He comenzado desde 0 la aplicación y la he vuelto a programar al completo, eliminando cualquier error de la versión anterior y añadiendo nuevas funciones. La interfaz también ha cambiado. Ahora el jugador puede añadir concursos a Music Maniac, configurando las rondas, los modos de juego y las preguntas. No hay ningún límite de concursos, y por defecto hay tres concursos (que por supuesto, pueden modificarse o eliminarse). Se pueden desplazar los concursos para ver otros.

En la parte inferior de la pantalla hay una serie de trucos e indicaciones. El menú de la aplicación se despliega al hacer un doble toque en la parte superior de la pantalla, e imita la forma de la barra de multitarea de iOS 4. Cada icono lleva a una sección diferente de la aplicación, generalmente para añadir, ordenar o editar concursos.

Modo multijugador

Se ha rediseñado el modo multijugador. A partir de ahora se podrá jugar hasta con 4 jugadores, vía Game Center o compartiendo el mismo dispositivo. La interfaz se adapta al número de jugadores para mostrar las puntuaciones de cada uno en todo momento. Además se puede pausar el juego y salir en cualquier momento.

Se ha mejorado el modo online. Ahora Music Maniac crea una caché del Top 50 de la iTunes Store y te permite jugar tanto en solitario como con amigos con estas canciones. La primera descargar puede tardar un poco, ya que se deben descargar alrededor de 50 MB, no obstante las siguientes son más rápidas, ya que Music Maniac aprovecha las canciones que ya se han descargado y siguen en el Top 50 de la iTunes Store  para agilizar la siguiente sincronización.

Rendimiento mejorado

Music Maniac es ahora más estable y más rápida. Se puede jugar en cualquier dispositivo que soporte iOS 4 y con bibliotecas grandes. El modo online ofrece además un redimiento mejorado al descargar y procesar todas las canciones para que durante las partidas el dispositivo tenga que hacer el minimo esfuerzo posible y se pueda mantaner un ritmo trepidante.

Universal

La aplicación sigue siendo universal, es decir, la diversión no se queda en el iPhone o iPod touch, sino que se puede jugar en el iPad con una interfaz mejorada para su pantalla. Los gráficos también están preparados para la Retina Display del iPhone 4 y los iPod touch de última generación.

Desde la aplicación Ajustes se puede cambiar el idioma de Music Maniac, traducido por completo al inglés, español y catalán. Puedes jugar con Music Maniac en inglés aunque tengas tu dispositivo en español… ¡o en ruso!

Nuevo sistema de juego

En Music Maniac se pueden crear los concursos más flexibles vistos en iOS. Ya no se establece el número de rondas por concurso, sino el número de veces que quieres jugar con un modo. Así es posible crear un concurso con una sola ronda para el modo rápido y muchas más rondas para el modo estándar. Además Music Maniac ofrece un nuevo modo de juego: el modo apuesta. Cuanto más puntos se arriesguen más puntos se pueden ganar.

Game Center

Además de soportar el modo multijugador hasta 4 jugadores a través de Game Center, Music Maniac incluye logros y tablas de clasificación en las que poder lucirse, También lleva un recuento de los aciertos y al final de cada concurso online que se juegue muestra la lista de las canciones que han sonado, por si te ha gustado alguna y quieres acerte con ella.

Imágenes

Estas son las imágenes que aparecerán en el App Store. Hay más imágenes en la página de Music Maniac.

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

Editado: En la primera versión de esta pequeña aplicación había un error que provocaba que en unidades con nombres que incluyesen espacios o caracteres especiales no se borrasen los archivos de forma definitiva. Se ha resuelto y he actualizado el artículo añadiendo el enlace para descargar la última versión en lugar de la que tenía el error. ¡Gracias a Jorosa por el aviso!

Archivos "borrados" del pendrive

Hay cerca de 800MB de archivos "borrados" en este pendrive

Hay veces que uno se sorprende al ver ciertos comportamientos de Mac OS X. Uno de los que menos me gustan es la forma de borrar archivos de un dispositivo extraíble (por ejemplo, un pendrive). En lugar de borrar el archivo, como sería de esperar, o moverlo a la papelera del Mac, lo almacena en una carpeta oculta dentro del propio pendrive que usa a modo de papelera. Si nos fijamos en la papelera de nuestro Mac, veremos que los archivos que hemos borrado del pendrive aparecen en ella, aunque no estén almacenados en el Mac.

El problema radica en que además de no borrar realmente los archivos y dejarlos en el pendrive (ocupando parte de su preciada capacidad), no hay forma de borrar los archivos individualmente de la papelera. Si usamos la combinación Función + Retroceso lo que hacemos es devolver el archivo eliminado a su carpeta de origen en lugar de borrarlo. Estamos pues obligados a vaciar la papelera y borrar definitivamente otros archivos que tal vez no queramos perder todavía.

Así que, algo mosqueado porque esto no haya cambiado ni en Snow Leopard ni en Lion (ni tiene pinta de que vaya a cambiar), he creado una simple aplicación en Automator para “limpiar” los pendrives de archivos supuestamente eliminados.

Cómo funciona

La carpeta .Trashes al descubierto

Esto lo aclara todo

Antes de dar los enlaces para descargar la aplicación, veamos cómo funciona. Como ya he dicho, Mac OS X mueve los archivos “borrados” a una carpeta oculta que funciona a modo de papelera. Esta carpeta se llama .Trashes (como de costumbre en OS X, al llevar un punto al principio del nombre, la carpeta es oculta). Si borramos la carpeta .Trashes, borramos todos los archivos que queríamos eliminar pero, ¿cómo la borramos sin pasar por la papelera de nuevo?

Aquí es donde entra en juego el potencial de un sistema basado en Unix. Gracias al comando rm (remove) podemos eliminar archivos o carpetas sin necesidad de pasar por la papelera. Combinando esto con un par de parámetros, concretamente -R (borrar de forma recursiva) -f (sin pedir confirmación) y -d (directorios y archivos) conseguimos vaciar el pendrive de archivos que queríamos borrar.

Obviamente tener que escribir todo esto en la terminal cada vez que queremos limpiar un pendrive de archivos “borrados” no es muy cómodo. Para hacer más cómoda la tarea recurriremos a Automator, ese pobre incomprendido que si bien es capaz de hacer maravillas, la mayoría de los usuarios desconoce incluso su existencia.

Creamos una nueva aplicación en AutomatorEl flujo resultantePara crear la aplicación abrimos Automator y elegimos crear una aplicación. A continuación arrastramos las acciones para formar el flujo que podéis ver en la imagen de la derecha. Básicamente el flujo es el siguiente:

  1. Solicitamos una carpeta. El usuario deberá seleccionar un dispositivo extraíble.
  2. Establecemos el valor de una variable con la ruta de la carpeta seleccionada.
  3. Leemos el valor de esta variable y se lo pasamos a un script Shell como parámetro (este paso y el anterior supongo que se pueden omitir y usar el resultado del paso 1 como argumentos para el paso 4, pero por pereza no lo he comprobado – si alguien se anima que lo comente en los comentarios).
  4. En el script Shell usamos el comando cd (change dir) para ir a la ruta del pendrive.
  5. A continuación, en el mismo Shell y cambiada la ruta a la que nos interesa, borramos la carpeta .Trashes con los parámetros que he expuesto antes.

Descarga

Seguidos los pasos y entendido el funcionamiento, aquí tenéis a vuestra disposición la aplicación.

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

En unos pocos minutos estará disponible la versión 1.0.1 de WP Carousel. Esta versión no incluye ninguna novedad, sino que está centrada en arreglar algunos errores que han afectado a algunos usuarios. Entre los cambios que tiene esta versión se encuentran:

  • Se ha desactivado el contador que impedía mostrar dos veces un carrusel debido a que algunos usuarios obtenían ese error aún cuando no habían mostrado más de un carrusel. Aún así persiste la limitación de no poder mostrar el mismo carrusel varias veces en la misma página.
  • A partir de ahora cuando un elemento no tenga extracto ni tenga valor en el campo personalizado que utiliza WP Carousel para las descripciones, se mostrará todo el contenido del elemento.
  • A partir de ahora los vídeos que se añadan a los contenidos personalizados funcionarán correctamente.
  • Se ha eliminado algo de código innecesario y se han hecho algunos cambios menores.

Como de costumbre, se puede actualizar desde el Panel de Administración de WordPress o descargar el plugin desde WordPress.org.

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

Music Maniac 2.0

Nota: Ya se han registrado suficientes probadores para Music Maniac 2.0. Muchas gracias a todos por mostrar vuestro interés.

El desarrollo de Music Maniac 2.0 va a buen ritmo, y ya ha llegado el momento de buscar voluntarios interesados en probar la aplicación, reportar errores y hacer sugerencias para mejorar aún más esta versión.

¿Qué se ofrece?

Colaborar en la creación de una aplicación para iOS, ser escuchado y ver las sugerencias que sean propuestas implementadas en la la versión final de la apliación. Poder sentir que se ha sido parte del proyecto y aparecer en los créditos de la aplicación, además de recibir una copia de la aplicación, incluidas todas las futuras actualizaciones de la misma.

¿Qué se necesita para ser probador?

Un dispositivo que soporte y tenga instalado iOS 4.0 (iPod Touch 2G/3G/4G, iPhone 3G/3GS/4 o iPad), con conexión a Internet vía Wi-Fi o 3G (imprescindible conexión a Internet en el dispositivo para poder instalar las Betas). Los dispositivos a los que se les ha realizado el Jailbreak no están excluidos, aunque no he comprobado que se puedan instalar las Betas en ellos.

¿En qué consiste la aplicación?

Se trata de la reescritura desde 0 de Music Maniac, el concurso musical para iOS. Describiendo a grandes rasgos la aplicación, he reescrito todo el código desde 0, he rediseñado toda la aplicación y la he reestructurado para hacerla estable, rápida y atractiva. Pero de momento quiero guardar en secreto las novedades, hasta tener lista la versión final.

¿Cómo inscribirse?

Ya se han registrado suficientes probadores y no se admiten más inscripciones. ¡Gracias por mostrar tu interés!

Atención: Este artículo fue escrito hace más de 1 año y probablemente estará desactualizado.

Google Reader después de aplicar algo de CSS con Stylish

Google Reader antes de activar el nuevo estilo

Google Reader antes de activar el nuevo estilo

Google Reader no destaca precisamente por tener el diseño más bonito del mundo. De hecho no ha recibido ningún rediseño desde hace bastante tiempo, a diferencia de otros servicios de como Calendar o Gmail. Si sois de los que utilizáis Google Reader directamente desde su web, sin recurrir a ninguna aplicación que se sincronice con él, agradeceréis este artículo.

Lo que veis en la imagen de arriba es Google Reader tras activar algo de CSS a través de Stylish. Si no tenéis instalado Stylish, podéis hacerlo en Firefox o Google Chrome (en otros navegadores, como Opera o Safari, hay formas diferentes de aplicar los estilos CSS).

Si ya tenéis instalado Stylish, ahora tendréis que instalar los estilos. Al ser un archivo demasiado grande, el autor (Mestiso) no ha podido insertarlo directamente en userstyles.org, pero comparte el código en su página web. Para instalarlo (a través de Stylish) primero accederemos a userstyles.org y haremos clic en el botón Install with Stylish, a continuación editaremos el estilo y reemplazaremos todo el código por el que nos ofrece su autor en su página web. Para ello, en Firefox, mostraremos el panel lateral de Stylish (Ver » Panel lateral » Stylish) y haremos doble clic sobre el estilo Google Reader – 3 Column Reader. Una vez reemplazado el código haremos clic en Guardar y cuando accedamos de nuevo a Google Reader, veremos un diseño mucho más limpio y elegante.

El único inconveniente es que algunas características dejan de ser accesibles, como los patrones. Sin embargo esta función sigue estando activa. Para poder acceder a ella simplemente desactivaremos temporalmente el nuevo estilo (siguiendo los mismos pasos que antes, sólo que en lugar de hacer doble clic en Google Reader – 3 Column Reader lo haremos sobre el icono con una S que aparece a la izquierda del nombre, que tras el doble clic perderá el color, indicando que el estilo está desactivado).

Estilo: userstyles.org
Estilo: kamilb.info
Stylish: Firefox | Google Chrome