Archive for the 'General' Category

Logos para la Drupal Association

Miércoles, Abril 9th, 2008

Hace poco nos inscribimos como “Organization member” de la Drupal Association. La ventaja principal es que es una forma de ayudar a Drupal (cuesta 73€ al año).

Para que puedas proclamar al mundo que eres miembro la gente de Drupal creó unos logos (más bien chapas) pero no nos gustan.

Por eso le dijimos a Fernando Bernal, uno de nuestros diseñadores que creara unos nuevos logos para ponerlos en Neurotic:


descargar png para fireworks


descargar png para fireworks


descargar png para fireworks


descargar png para fireworks


descargar png para fireworks


descargar png para fireworks


descargar png para fireworks


descargar png para fireworks

Además, como primera versión también hizo otros que a nosotros nos gustan menos pero que seguro que hay personas que les gustan más:


descargar png para fireworks


descargar png para fireworks


descargar png para fireworks


descargar png para fireworks

Problemas de timeout de WordPress 2.5 en el fichero classes.php

Jueves, Abril 3rd, 2008

Recientemente hemos actualizado Marujeo a Wordpress 2.5 y nos hemos encontrado con un serio problema a la hora de cargar las categorías de los artículos, este timeout en todas las pantallas relacionadas con las categorías:

Fatal error: Maximum execution time of 30 seconds exceeded
in /home/marujeo/public_html/wp-includes/classes.php on line 422

Al principio pensamos que era alguna consulta de base de datos que no estaba optimizada, pero hemos encontrado la causa. En el fichero /wp-includes/classes.php, hay una función recursiva llamada display_element que va calculando el tamaño de las categorías y las va clasificando de forma jerárquica. Esta función es correcta cuando tienes 20 o 30 categorías, pero nosotros tenemos nada más y nada menos que 999 categorías y esta función llega a tardar hasta 4 minutos en terminar.

Así que finalmente hemos subido un “parche” (a falta de una solución definitiva) que elimina la ejecución de esta función, lo malo es que no se pueden dar de alta nuevas categorías hasta que encontremos una solución mejor.

El parche ha consistido en comentar las siguientes líneas del método walk del fichero /wp-includes/classes.php:
(más…)

El blog de Carlos Rincón, es decir, el mio

Miércoles, Abril 2nd, 2008

Pues está casi todo dicho en el título, he creado el blog de Carlos Rincón Sánchez, mi blog, igual que hizo Jordi con el suyo.

Nuestra cronología

Martes, Marzo 11th, 2008

He publicado en mi blog personal la cronología de Neurotic

Restaurar el password de administrador de MySQL

Martes, Febrero 26th, 2008

Recientemente una actualización de seguridad de Ubuntu ha provocado que me quedara sin mi usuario de administración local para MySQL, de forma que he tenido que restaurarlo, aquí van los pasos:

Pasos realizados para Ubuntu 7.10 con MySQL 5. Si quieres saber como restaurarlo en Windows, al final del post tienes un link al respecto.

Parar la base de datos

sudo /etc/init.d/mysql stop

Asegurarnos de que no queda ningún proceso de MySQL en el sistema

ps -ef | grep mysql

Si quedara alguno, pedirle amablemente que se vaya

sudo kill numero_de_proceso

Iniciamos MySQL en modo seguro (más información sobre skip-grant-tables):

mysqld_safe --skip-grant-tables &

Realizamos la conexión como root

mysql -u root

Y, desde el prompt de mysql, modificamos el password:

mysql> UPDATE mysql.user
SET password=PASSWORD('nuevo_password')
WHERE user='root';

Si tenemos un entorno local asegurado y queremos ahorrarnos el password, dejamos el campo en blanco:

UPDATE mysql.user SET password='' WHERE user='root';

Deberemos ejecutar esta sentencia para asegurarnos de que los cambios tienen efecto de forma inmediata:

mysql> flush privileges;

Ya solamente nos queda reiniciar el servidor de MySQL:

sudo /etc/init.d/mysql restart

Y podremos acceder con el usuario root de nuevo:

mysql --user=root -p

O sin password

mysql --user=root

Visto aquí, más información y los pasos para realizar la recuperación en Windows en la documentación de MySQL

Cómo resetear el password de administrador en un PHP Nuke

Viernes, Febrero 22nd, 2008

Si te encuentras en la situación de tener que gestionar un phpnuke pero no dispones o te has olvidado del password del portal de administración, puedes resetearlo de forma sencilla.

Se accede al gestor de base de datos (normalmente PHPMyAdmin) y se ejecutan las siguientes sentencias de UPDATE, antes de realizarlas conviene asegurarse de que los nombres de los campos se correspondan (pueden variar según la versión de phpnuke) y los nombres de los usuarios de administración (en nuke_authors, lo normal es que sea “God”).

UPDATE nuke_users SET user_password = MD5( 'nuevo_password' )
WHERE nuke_users.username = "usuario_administrador";

UPDATE nuke_authors SET pwd = MD5( 'nuevo_password' )
WHERE nuke_authors.name = "usuario_administrador"

Está probado en MySQL pero es SQL estándar así que no debería dar problemas con otros motores de BBDD.

La codificación utilizada es MD5, por lo que se almacena de forma segura.

Visto aquí.

Al día con las versiones de Drupal

Jueves, Enero 17th, 2008

A causa de varios problemas de seguridad, nuestro proveedor de hosting tuvo que actualizar PHP a la versión 5 de improviso. Esta actualización nos ha causado varios problemas, entre ellos, que varias de nuestras instalaciones de Drupal en 4.7 y 4.6 se veían afectadas por un curioso problema: una vez identificado, la información de login no persiste, es decir, aunque realices el login, en la página siguiente eres usuario anónimo (uid 0) de nuevo.

Tras investigar y descubrir que es un problema relacionado con el fichero includes/session.inc la solución consistió en aplicar este parche
function sess_read($key) {
global $user;
register_shutdown_function('session_write_close');
$result = db_query_range("SELECT u.*, s.* FROM {users} u
INNER JOIN {sessions} s ON u.uid = s.uid
WHERE s.sid = '%s' AND u.status < 3", $key, 0, 1);
if (!db_num_rows($result)) {

Y eliminar la llamada a register_shutdown_function(’session_write_close’); en la función db_connect(), en el caso de drupal 4.7, del fichero includes/database.mysqli.inc

La explicación en detalle es que, a partir de PHP 5.0.5, los destructores pueden usar sesiones pero los manejadores de sesion no pueden usar objetos, por lo que debemos cambiar el orden, se ha de cerrar la sesion con register_shutdown_function(’session_write_close’); antes de destruir los objetos.

Este problema y su solución están ya incluidos en la rama principal de desarrollo de Drupal, y evitar este tipo de inconvenientes es una razón adicional a la que nos ofrecen los parches de seguridad, por lo que, si bien no sería imprescindible migrar todas las instalaciones de Drupal a la release más actual, sí es muy recomendable tenerlas actualizadas al último parche de su versión correspondiente.

Paso a paso para instalar Drupal

Miércoles, Enero 16th, 2008

Hemos hecho varias referencias a instalaciones complejas de Drupal, en modo multisite, con un servidor de nombres propio … En esta entrada intentaré ceñirme a objetivo muy claro: Instalar Drupal de forma rápida y sencilla.

Lo primero que necesitamos es descargar Drupal desde su página oficial. A día de hoy la última versión estable es Drupal 5.6

Una vez descargado, deberemos instalar un servidor LAMP, para Ubuntu y Debian es algo tan simple como esto:

sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server php5-gd mysql-query-browser mysql-admin

Si os pide el password para el usuario de MySQL y la instalación es solamente local, podéis dejarlo vacío.

Realizar esta instalación y configuración para entornos Windows es sensiblemente más compleja, podéis echarle un vistazo al paquete XAMPP si ese es vuestro caso.
(más…)

Codificación de caracteres en MySQL

Jueves, Enero 10th, 2008

Cuando se realizan movimientos de exportación e importación sobre tablas, o bases de datos completas en MySQL (por ejemplo, para importar los datos en local de una base de datos que está en un hosting de internet), existe el riesgo de que la codificación de caracteres se vaya al garete.

Una forma de resolver esto sin complicarnos demasiado es añadir esta línea al principio del fichero .sql que vayamos a importar;

/*!40101 SET NAMES utf8 */;

Esto hará que toda la codificación de ese fichero se realice en UTF8, evitándonos problemas con los caracteres extraños.

Una de las grandes ventajas de MySQL es que permite la codificación de caracteres a unos niveles muy detallados, puedes especificar una codificación en la propia instalación, en una base de datos… hasta en una columna de una tabla. En esta entrada del blog Orthogonal Thought hay un estupendo análisis de la codificación de caracteres orientada a la migración de datos.

Conexión remota a MySQL en Ubuntu / Debian

Miércoles, Enero 9th, 2008

El acceso remoto a un servidor MySQL está desactivado por defecto, para poder acceder desde otras máquinas, ya bien desde nuestra red local, o desde una dirección IP externa, debemos modificar algunas opciones de configuración:

En el fichero /etc/mysql/my.conf se deben comentar estas dos líneas

#skip-networking
#bind-address = 127.0.0.1

Después, se debe reiniciar el servidor MySQL

/etc/init.d/mysql restart

Y entonces, nos conectamos a mysql en el servidor y asignamos los siguientes privilegios:

GRANT ALL PRIVILEGES ON *.* TO usuario@"192.168.1.%"
identified by "password";

Donde usuario y password son los datos de conexión que utilizaremos para conectarnos en remoto y 192.168.1.% indica que todas las direcciones IP de nuestra red local tienen acceso, % se usa como comodín.

De esta forma todas las direcciones IP de nuestra red local podran conectarse en remoto a través de usuario / password:

mysql --user=root --host=servidor -p password