Cron Job WordPress

Versión 0.4 del plugin para WordPress Collapsing Category List

0

Poquito a poco se va aumentando el número de características y utilidades que el plugin ofrece. En esta ocasión se ha añadido la posibilidad de mantener colapsadas las categorías cuando se muestra la página de un post al usuario. Además se han corregido varios bugs.

Como novedad para los desarrolladores de WordPress que usen el plugin, se han añadido los archivos de traducción para español e inglés (que ya era hora), y la compatibilidad para poder traducir el plugin a cualquier otro idioma.

Logo Cassandra

Cassandra 2.x y PHP para desarrolladores SQL: El modelo de datos

0

Si has trabajado con una base de datos relacional tal vez te resulte algo confuso al principio comprender el modelo de datos que usa Cassandra, intentaré ser lo más claro posible, pero si te surgen preguntas no dudes en dejarlas en los comentarios.

 

Columns

El elemento más básico de la base de datos Cassandra es la columna, se compone de tres elementos: nombre de la columna, valor y timestamp. Os muestro un ejemplo como un array:

array(
  "nombre" => "email",
  "valor" => "webmaster@localhost.com",
  "timestamp" => time(),
);

Cassandra añade el timestamp automáticamente, con lo que otra forma de representarlo es como un conjunto clave:valor:

nombre_columna:valor

Super columnas (En desuso) y Columnas Compuestas

Las super columnas son un conjunto de columnas con sus correspondientes valores:

array(
  "nombre_superColumna" => array(
    "usuario1" => array(
      "nombre" => "email",
      "valor" => "webmaster@localhost.com",
      "timestamp" => time()
    ),
    "usuario2" => array(
      "nombre" => "email",
      "valor" => "email@email.com",
      "timestamp" => time()
    ),
    "usuario3" => array(
      "nombre" => "email",
      "valor" => "otroemail@otroemail.com",
      "timestamp" => time()
    ),
  ),
)

Las super columnas tienen algunos problemas de rendimiento, sobre todo al ordenarlas. Para solucionarlo se crearon las columnas compuestas que se benefician de los comparadores compuestos, y sobretodo, de CQL 3 (Cassandra Query Language).

Familia de columnas

Es el conjunto de columnas o super columnas. Me explico:

Las column Family o  familia de columnas se puede configurar de dos maneras: como Super o como Standard. Si se elige la opción Standard, en la column family solo se podrán guardar columnas, no super columnas. En cambio si la column family está configurada como Super podrá guardar, además de las columnas, las super columnas. Esta flexibilidad permite jugar con la base de datos y adaptarla a nuestras necesidades.

Ejemplo:

array(
  "name" => "ColumnFamily",
  array( "name" => "SuperColumn",
    array( "colums" )
  ),
)

Keyspace

El keyspace es nuestra base de datos, donde alojaremos todas las columFamilies que necesitemos.

Ejemplo:

array(
  "name" => "keyspace",
  array("name" => "columnFamily",
    array(
      [...]
    ),
  ),
)
error_repo

Solución: Error en NetBeans al conectar con un repositorio Subversion: handshake_failure

0

Hace unos días me encontré con este problema. Fue después de actualizar Java a su versión más actual. Al ir a realizar un commit desde NetBeans 8.1 a un repositorio Subversion me devolvió este error, y claro, no pude realizar el commit.

Después de mucho indagar en el problema encontré que el JDK 1.8 ha abandonado el cifrado RC4 por inseguro, que es el cifrado que utilizaba el servidor donde tengo el repositorio. Así que como no tengo acceso al servidor, lo más adecuado es instalar la versión 1.7 de JDK y modificar NetBeans para que utilice esa versión.

Para indicarle a NetBeans la versión de JDK que debe usar debemos buscar un archivo llamado netbeans.conf, que habitualmente estará en el siguiente directorio:

C:\Program Files\NetBeans 8.x\etc\netbeans.conf

En ese archivo hay que buscar la variable netbeans_jdkhome y añadir la ruta de la versión del JDK:

netbeans_jdkhome="C:\Program Files\Java\jdk1.7xxxxx"

En mi caso ya tenía instalada la versión 1.7 de JDK, si tu no la tuvieras tendrás que instalarla primero

Guardamos el archivo, abrimos NetBeans y volvemos a hacer ese commit que se resistía.

Logo Cassandra

Cassandra 2.x y PHP para desarrolladores SQL: Instalación

0

La base de datos No-SQL Cassandra fue creada por Facebook a causa de la necesidad de disponer de una base de datos distribuida de alto rendimiento, flexible, tolerante a fallos, escalable y que fuese capaz de procesar grandes cantidades de datos. Más tarde fue liberada bajo licencia Apache y actualmente es utilizada principalmente por empresas de internet con proyectos con un alto uso de base de datos como Twitter.

En esta serie de artículos iré desgranando la instalación, funcionamiento y desarrollo de aplicaciones en PHP con Cassandra, comparando las sentencias utilizadas para insertar, actualizar, etc de SQL con los métodos a utilizar en Cassandra. Por desgracia al ser algo completamente distinto a cualquier base de datos SQL tendré que añadir algo de teoría, pero intentaré que os resulte lo más ameno posible.

Al toro.

REQUISITOS

Para la realización de esta guía se utilizará Debian 8 Jessie como sistema operativo.

Doy por hecho que ya se dispone de un servidor web Apache con PHP instalado en la máquina de testeo que se esté usando. Las aplicaciones que se van a instalar han sido probadas en una máquina virtual Debian 8 Jessie utilizando como aplicación de virtualización VirtualBox, instalado en un host Debian 8 Jessie.

En un servidor de producción recomiendo que tenga bastante RAM (por encima de 1GB, ya veremos más adelante el porqué. En la máquina virtual que uso de testeo dispone de 700 MB y funciona bien, pero en producción no es lo recomendable).

Instalaremos la base de datos Cassandra y PHP-Driver que nos dará la extensión para PHP y una abstracción de la base de datos donde tenemos los métodos básicos para trabajar con Cassandra: insertar, actualizar, borrar, crear, etc.

PREPARANDO EL SISTEMA

Antes de empezar a instalar debemos actualizar el sistema operativo de la forma habitual:

apt-get update
apt-get upgrade

Una vez actualizado el sistema empezamos a instalar.

INSTALANDO CASSANDRA

Lo primero que necesitamos hacer para instalar Cassandra es editar los repositorios de Debian:

nano /etc/apt/sources.list

Una vez que se abra el editor añadimos las siguientes lineas:

deb http://www.apache.org/dist/cassandra/debian/ 21x main
deb-src http://www.apache.org/dist/cassandra/debian/ 21x main

Como podrás observar después de la ruta del repositorio se ha añadido “21x” esto indica el número de versión a obtener, en este caso es la versión actual de cassandra al crear este post. No se indica el número de parche, es decir, actualmente se puede descargar Cassandra 2.1.

Si dentro de unos meses sale la versión “2.2” solo tendrás que cambiar el uno por el dos.
Volvemos a consola y actualizamos los repositorios.

apt-get update

Nos dará un error en las claves gpg. Procedemos a actualizarlas con las siguientes instrucciones:

gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
gpg --export --armor F758CE318D77295D | sudo apt-key add -

Ojo con el guión del final, hay que añadirlo, sino dará error.

Con el paquete 0.7.5 nos da otro error de clave gpg así que también instalamos esta de la misma manera:

gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00
gpg --export --armor 2B5C1B00 | sudo apt-key add -

También necesitarás añadir la siguiente clave:

gpg --keyserver pgp.mit.edu --recv-keys 0353B12C
gpg --export --armor 0353B12C | sudo apt-key add -

Verificamos que tenemos el sistema actualizado.

apt-get update
apt-get upgrade

Actualizamos todos los paquetes que aparezcan.

Procedemos a instalar el paquete de la base de datos NoSQL Cassandra:

apt-get install cassandra

Cassandra necesita Java para funcionar. Debian 8 ya dispone de OpenJDK en su versión 7, y aunque desde los desarrolladores de Cassandra no recomiendan su uso, para los ejemplos que vamos a desarrollar nos sirve.

En producción, o si vas a desarrollar un proyecto con Cassandra tendrás que instalar la última versión de Java de Oracle.

Por último, ejecutamos el siguiente comando para construir las dependencias:

dpkg-buildpackage -uc -us

Si el sistema no te reconoce el comando es porque te falta el paquete dpkg-dev. Instálalo de la forma habitual, y vuelve a intentarlo:

apt-get install dpkg-dev

INSTALANDO DATASTAX PHP-DRIVER PARA CASSANDRA

Datastax PHP driver, es el controlador y abstracción de base de datos que utilizaremos para conectar con Cassandra desde PHP. Este controlador nos da la posibilidad de trabajar tanto con CQL (Cassandra Query Language. Parecido a SQL) y/o el protocolo binario de Cassandra.

Aunque en la página del repositorio nos indican varias formas de instalar el controlador (https://github.com/datastax/php-driver/blob/master/ext/README.md), el único que me ha funcionado correctamente ha sido el de descargar las fuentes y compilarlo. Tú puedes probar los otros métodos, pero el que te voy a indicar funciona en Debian 8.

Las siguientes instrucciones deberías ejecutarlas en el ordenador de desarrollo y no en el servidor o máquina virtual donde tengas instalada la base de datos. (A no ser que la hayas instalado en el ordenador de desarrollo).

Instalamos algunos paquetes necesarios para realizar la compilación:

apt-get install g++ make cmake libuv-dev libssl-dev libgmp-dev php5 php5-dev openssl libpcre3-dev git

Primero necesitamos descargar las fuentes desde GitHub, utiliza el directorio que prefieras:

git clone https://github.com/datastax/php-driver.git
cd php-driver
git submodule update --init
cd ext
./install.sh

Estos comandos nos ha creado un archivo llamado cassandra.so en /usr/lib/php5/20131226/ (el número del directorio puede variar en tu instalación. Revísalo).
Ahora creamos un archivo .ini para la extensión de PHP:

nano /etc/php5/mods-available/cassandra.ini

Dentro de ese archivo añadimos las siguientes líneas:

; configuration for PHP driver Cassandra
extension=cassandra.so

Guardamos.

Le indicamos a PHP que nos active la extensión

php5enmod cassandra

Y reiniciamos Apache:

/etc/init.d/apache2 restart

Ahora si ejecutamos el siguiente comando para mostrar los módulos de PHP debería aparecernos Cassandra, si no es así es que algo a fallado:

php -m

INICIANDO CASSANDRA POR PRIMERA VEZ

Ahora que ya tenemos todo instalado es el momento de arrancar Cassandra. Esto es algo muy sencillo, solo tienes que ejecutar el siguiente comando:

cassandra -f

También tienes otras maneras de iniciar Cassandra. Por ejemplo como servicio:

service cassandra start

Si al iniciar Cassandra te da un error de memoria, haz lo siguiente:

Accede a /etc/cassandra y edita el archivo cassandra-env.sh:

cd /etc/cassandra
nano cassandra-env.sh

Busca las siguientes dos líneas:

#MAX_HEAP_SIZE="4G"
#HEAP_NEWSIZE="800M"

Descomenta las dos líneas, y sustituye los valores por unos más bajos. En mi caso he bajado MAX_HEAP_SIZE a 2G y HEAP_NEWSIZE lo he dejado como está.

Estas dos líneas permiten configurar la cantidad de memoria RAM que Cassandra utilizará.

Ahora vamos a utilizar el código de ejemplo que hay en el repositorio de PHP-Driver para probar que todo funciona correctamente.

Crea un archivo PHP con el siguiente contenido:

  1. <?php
  2. $cluster = Cassandra::cluster() // connects to localhost by default
  3. ->build();
  4. $keyspace = 'system';
  5. $session = $cluster->connect($keyspace); // create session, optionally scoped to a keyspace
  6. $statement = new Cassandra\SimpleStatement( // also supports prepared and batch statements
  7. 'SELECT keyspace_name, columnfamily_name FROM schema_columnfamilies'
  8. );
  9. $future = $session->executeAsync($statement); // fully asynchronous and easy parallel execution
  10. $result = $future->get(); // wait for the result, with an optional timeout
  11.  
  12. foreach ($result as $row) { // results and rows implement Iterator, Countable and ArrayAccess
  13. printf("The keyspace %s has a table called %s\n", $row['keyspace_name'], $row['columnfamily_name']);
  14. }

Este código devuelve las tablas que contiene el Keyspace “system” (Más adelante explicaré que es eso). Si te da error como este: “No hosts available for the control connection”, puede ser por dos razones, o bien no está funcionando Cassandra, con lo que tendrás que iniciarla con uno de los comandos anteriores, o bien no la tienes en localhost sino en un servidor externo o máquina virtual.

Para resolverlo tendrás que sustituir las siguientes líneas:

  1. <?php
  2. $cluster = Cassandra::cluster() // connects to localhost by default
  3. ->build();

Por estas otras:

  1. <?php
  2. $cluster = Cassandra::cluster()
  3. ->withContactPoints('127.0.0.1')
  4. ->build();

Sí, solo añadimos “->withContactPoints(‘127.0.0.1’)”, con este método le estamos indicando la ip de nuestro servidor. En tu caso es posible que tengas que sustituir “127.0.0.1” por la ip de tu servidor o máquina virtual. Más adelante explicaré cada método, pero para verificar que está funcionando todo correctamente es suficiente.

 

Con esto finalizamos la instalación de Cassandra para que pueda ser utilizada por PHP.

subversion_logo

Subversion y Apache, corregir el error 413 Request Entity Too Large

0

Algunas veces, cuando realizamos commits con muchos archivos, Subversion no es capaz de procesar el commit y nos devuelve el error “413 Request Entity Too Large”. Este error se produce porque el commit que estás realizando tiene un tamaño superior al que tiene configurado Subversion al hacer la petición.

Para corregirlo hay que añadir los siguientes parámetros al virtual host del servidor de Subversion:

  1. LimitXMLRequestBody 0
  2. LimitRequestBody 0

Con estos dos parámetros eliminarás el límite impuesto por Subversion.

Si lo deseas, en vez de eliminar el límite puedes aumentarlo a 64MB,256MB, etc.

 

Cron Job WordPress

Versión 0.3 del plugin para WordPress Collapsing Category List

4

En esta nueva versión se ha actualizado el plugin para adaptarlo a WordPress 4.4, añadiéndole compatibilidad con versiones anteriores.

Se han sustituido las imágenes que hacían de iconos para expandir y colapsar las categorías por caracteres de texto, que permitirán aumentar su tamaño por css, de tal forma que puedan visualizarse correctamente en dispositivos móviles y responsive web. Por retrocompatibilidad se ha añadido un checkbox que permite cambiar entre las imágenes antiguas y los estilos css que mostrarán los nuevos iconos.

Se ha añadido la opción de ocultar los iconos de expandir y colapsar las categorías para poder mejorar la visualización y usabilidad en los dispositivos móviles.

Cron Job WordPress

Versión 0.2.1 del plugin para WordPress Collapsing Category List

0

Pues sí, este pequeño plugin propio sigue creciendo. Como no suelo publicar post relativos a las actualizaciones de los plugins que he creado (mal por mi parte) os explicaré qué es, para qué sirve y los cambios que se han realizado hasta la fecha.

Collapsing Category List es un plugin para WordPress que, a través de un filtro, modifica el widget de categorías de WordPress para que las subcategorías colapsen y no se muestren directamente. Además de otras características mejoradas.

Subcategoría colapsada

Subcategoría colapsada

Subcategoría expandida

Subcategoría expandida

 

Las mejoras de las que dispone el plugin son las siguientes:

 

  • Colapsar y expandir el listado de subcategorías.
  • Posibilidad de ordenar las categorías por nombre o slug.
  • Posibilidad de ocultar categorías.
  • Posibilidad de eliminar el enlace de todas las categorías.
  • Posibilidad de eliminar el enlace de una o varias categorías.
  • Posibilidad de cambiar las imágenes que indican la acción de colapsar o expandir un listado de subcategorías. Por defecto aparecen los símbolos más (+) y menos (-).

Cualquier sugerencia o idea para mejorar el plugin es bienvenida.

Página de descarga: https://wordpress.org/plugins/collapsing-category-list/

Optimización de WordPress

Mejorando el redimiento, el tiempo de carga y la puntuación de Page Speed de tu WordPress

0

Ya tienes tu WordPress instalado, configurado y con un estupendo tema. Le has instalado entre media y una docena de plugins, ya sean para añadir nuevas características a la administración, o para el frontend. Le has añadido un montón de contenidos para que, en cuanto lo subas a producción, los usuarios se queden maravillados de lo bien que escribes, de los productos que vendes, de los trabajos que realizas, etc. Has contratado al mejor analista SEO de todo el mundo para conseguir estar en los primeros puestos y comerte a la competencia. Tienes una campaña de marketing para radio, televisión, prensa e internet, que ni los de Nike.

Y lo subes a producción.

Y aunque tendrás visitas, venderás tus productos, y los usuarios te conocerán gracias a la campaña de marketing, el negocio no termina de despegar. Empiezas a preguntarte qué sucede. Pides informes, análisis, reuniones, cambios, mejoras. Pero nada lo soluciona.

Continue reading “Mejorando el redimiento, el tiempo de carga y la puntuación de Page Speed de tu WordPress” »

Integración continua: Automatizando la creación de proyectos WordPress, Drupal, Symfony, etc. (II)

0

En el post anterior hemos actualizado el script que crea los repositorios, para poder añadirle unas cuantas acciones para automatizar la creación del proyecto (creación de directorios, directorios ignorados, etc.). Ahora vamos a desarrollar la segunda parte, que consistirá en la automatización de la instalación del cms o framework elegido.

Continue reading “Integración continua: Automatizando la creación de proyectos WordPress, Drupal, Symfony, etc. (II)” »

Integración continua: Automatizando la creación de proyectos WordPress, Drupal, Symfony, etc. (I)

0

En el post anterior de esta guía: Integración continua: Automatizando la creación de repositorios con Git y Subversion desarrollamos un script en Bash para poder, como indica el título del post, automatizar la creación de repositorios. A continuación automatizamos la descarga del código fuente del cms, framework, plugins, módulos, temas, etc. que usará nuestro proyecto. Después realizamos una pequeña pausa para crear una máquina virtual por consola usando VirtualBox, y configurar e instalar Selenium para poder realizar test funcionales. Ahora vamos a realizar la creación de los proyectos, automatizando la instalación de los plugins, modulos y temas necesarios usando nuestra máquina virtual y Selenium.

Como es una de las partes que más código requiere, lo dividiré en dos post. En este primer post añadiremos algunas líneas a nuestro script en bash que nos permitirá automatizar la creación de nuestro proyecto usando Drupal, WordPress o Symfony 2.

¿Estás listo? Empezemos.

Continue reading “Integración continua: Automatizando la creación de proyectos WordPress, Drupal, Symfony, etc. (I)” »

Ir arriba