25 de febrero de 2016

:: Liferay. Expiración de contenidos. ¿Bug?

Esta entrada describe un posible "bug" en la expiración de un contenido desde el gestor de portales Liferay, en la que se da un comportamiento que puede despistar a algunos usuarios.

Cuando un usuario decide expirar un contenido web, accederá a la planificación temporal del mismo y desmarcará el "check" denominado "No expira automáticamente". A continuación seleccionará la fecha y hora en la que desea que este contenido expire.

De lo que muchas veces no nos percatamos es que el año por que por defecto aparece es el de publicación del evento mas uno, por lo que en realidad el usuario está definiendo un contenido que expirará dentro de un año; nada más lejos de su intención.
Hasta aquí el comportamiento es el normal y esperado, pero que sin embargo induce a error de muchos usuarios encargados de la gestión de contenidos web.

Por otro lado, si el usuario se percata de esto, puede especificar una fecha y hora correctas y tras pulsar sobre el botón "Publicar" no obtendrá ningún mensaje indicándole que existen datos incorrectos, pero cuando acceda de nuevo a la edición de esa entrada, comprobará que la fecha de expiración no ha sido almacenada.
La consideración a tener en cuenta que quizás podría considerarse como un bug ya que no se informa -en ningún momento al usuario- es que esta fecha de expiración (fecha y hora) debe ser posterior a la actual ya que de lo contrario no se almacenará.

Teniendo en cuenta estos dos pequeños detalles, evitarremos perder tiempo evaluando el correcto o incorrecto funcionamiento de la expiración de contenidos.

21 de febrero de 2016

:: Sentencia Explain en MySQL

La sentencia EXPLAIN de MySQL, quizás poco conocida y utilizada puede servirnos para optimizar las consultas sobre nuestra base de datos.
Esta sentencia devuelve una relación de registros  con información sobre cada una de las tablas empleadas en la consulta a la que acompaña.

El formato de la misma es la siguiente:
EXPLAIN SELECT * FROM tabla1, tabla2; 

Los registros devueltos como resultado de la consulta anterior  muestran la lista las tablas en el orden en el que MySQL las leería al procesar la consulta, es decir, el primer registro (fila) devuelto sería la primera tabla que se lee, y último registro sería la última tabla que sería leída.
Este orden es importante ya que nos indicará el plan de ejecución de la consulta y, por tanto, será información relevante para llevar a cabo las posibles optimizaciones.

Adicionalmente puede utilizarse la sentencia EXTENDED para obtener información más detallada del plan de ejecución. En este caso, nos devolverá una columna adicional denominada “filtered”, que nos indicará el porcentaje aproximado de filas filtradas por la condición empleada en la tabla.

El formato es el siguiente:
EXPLAIN EXTENDED SELECT * FROM tabla1, tabla2; 
Utilizada esta sentencia con SHOW WARNINGS nos mostrará la consulta reescrita tras la actuación del optimizador.
 EXPLAIN SELECT * FROM tabla1, tabla2 SHOW WARNINGS; 
Otro posible uso sería con PARTITIONS, para obtener información sobre las tablas particionadas de la consulta.
 EXPLAIN PARTITIONS SELECT * FROM tabla1, tabla2;
Tras la ejecución de la consulta con la sentencia EXPLAIN obtendremos una serie de filas con distintos campos, que pasaremos a describir a continuación:

  • id: identificador de cada una de las tablas procesadas en la consulta
  • select_type: indica el tipo de SELECT que se ha ejecutado. En función del tipo de SELECT nos permitirá identificar qué tipo de consulta se trata; Existen varios tipos: SIMPLE, PRIMARY, UNION, DERIVED…
  • table: nombre de la tabla a la que se refiere la información de la fila. También, puede ser alguno de los siguientes valores:
    • : tabla resultante de la unión de las tablas cuyos campos id son M y N
    • : tabla resultante de una tabla derivada (una subconsulta en la cláusula FROM)cuyo id es N
    • : tabla resultante de una subconsulta cuyo id es N
  • partitions: particiones cuyos registros coinciden con los de la consulta (cuando se utiliza EXPLAIN PARTITIONS)
  • type: tipo de unión utilizado
  • possible_keys: indices disponibles sobre la tabla. Si esta columna es NULL, indica que no hay índices que puedan ser utilizados para optimizar la consulta
  • key: índice utilizado por MySQL para ejecuar la consulta. Puede ocurrir que el nombre del índice no esté presente en la lista de possible_keys
  • key_len: tamaño del índice utilizado por MySQL para ejecutar la consulta.
  • ref: columnas o constantes comparadas con el índice especificado en la columna key
  • rows: número de filas aproximado que MySQL considera que deben ser examinadas para ejecutar la consulta
  • filtered: porcentaje estimado de filas que serán filtradas por la condición de la consulta (cuando se utiliza EXPLAIN EXTENDED)
  • Extra: información adicional sobre cómo MySQL ejecuta la consulta

 Más información sobre MySQL: http://dev.mysql.com/doc/refman/5.7/en/




17 de febrero de 2016

:: Wordpress. Eliminar la versión del código

Una de las buenas prácticas en Wordpress consiste en eliminar la cabecera que muestra información sobre la versión instalada.
La cabecera que aparece cuando consultamos el código fuente de una página es la siguiente:
< meta name="generator" content="WordPress 4.4.2" / >


El código que genera esta metaetiqueta es el siguiente:

< meta name="generator" content="WordPress " / >

Para eliminar el código que genera esta información, debemos localizar el fichero "functions.php" dentro de nuestro tema y añadiremos la sentencia siguiente:
remove_action('wp_head', 'wp_generator');

De esta manera eliminaremos esta información del código fuente de nuestro portal.

15 de febrero de 2016

:: Alfresco. Definir usuario administrador

En Alfresco, y en este caso en la versión 4.0d en ocasiones es necesario indicar que un determinado usuario sea administrador.
Para ello podemos seguir esta serie de pasos a través de la asignación a un determinado grupo:

1.- En la entrada de menú "Más", seleccionamos "Grupos"

2.- Pulsamos el botón "Examinar" para mostrar todos los grupos existentes

3.- En la primera columna -de las tres que nos aparecen- seleccionamos "administracion (site_administracion)

4.- En la segunda columna seleccionamos "administracion (site_administracion_SiteManager)"

5.- En la última de las columnas buscamos el usuario requerido y lo añadimos a este grupo
De esta manera el usuario asignado será usuario administrador de los sitios creados en nuestro Alfresco, una opción más rápida y cómoda que otras posibles alternativas.

12 de febrero de 2016

:: CSS. Cómo centrar elementos HTML

Breve resumen sobre cómo centrar elementos HTML, teniendo en cuenta si son elementos de bloque o de línea.
Algo a tener en cuenta y que puede sernos de ayuda cuando estamos maquetando una web.

Fuente: Campus MVP

10 de febrero de 2016

:: Alfresco. Habilitar las notificaciones vía email

Para habilitar las notificaciones vía email a los usuarios, por ejemplo las invitaciones a unirse a un sitio, debemos añadir la siguiente línea en el fichero "alfresco-global.properties" ubicado en la ruta "c:\alfresco\tomcat\shared\classes\" (suponiendo que nuestro Alfresco se encuentra en "c:\alfresco").

### E-mail site invitation setting ###
notification.email.siteinvite=true

Tras este cambio deberemos reiniciar el servicio de Alfresco, para que los cambios tengan efecto.

7 de febrero de 2016

:: Alfresco. Modificar el puerto por defecto

Para modificar el puerto al que responde Alfresco, tendremos que modificar dos ficheros.

1.- En el fichero "server.xml" ubicado en "c:\alfresco\tomcat\conf\" buscaremos el literal "8080" y lo modificaremos por el valor que deseemos.
El valor a modificar es el que aparece en negrita.
               < Connector port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" maxHttpHeaderSize="32768" / >


2.- En el fichero "share-config-custom.xml" ubicado en "c:\alfresco\tomcat\shared\classes\alfresco\web-extension\" debemos buscar el literal "8080" y sustituirlo por el puerto que deseemos.


3.- Reiniciaremos el servicio de Alfresco y este ya responderá por el nuevo puerto especificado.

2 de febrero de 2016

:: Alfresco 5. Cómo habilitar el protocolo IMAP

El protocolo IMAP (Internet Message Access Protocol), es un protocolo de aplicación que permite el acceso a mensajes almacenados en un servidor de Internet.
IMAP permite a los usuarios acceder a sus e-mails directamente en el servidor y sólo descargar -a la máquina local- los mensajes y archivos adjuntos que le resulten de interés.

Para habilitar el protocolo IMAP en nuestro servidor Alfresco, deberemos añadir las siguientes líneas al fichero: "alfresco-global.properties" ubicado en "c:/alfresco/tomcat/shared/classes/" (considerando que tenemos nuestro alfresco en c:/alfresco)

### IMAP
imap.server.enabled=true
imap.server.port=143
imap.server.host=IP del servidor

Tras reiniciar nuestro Tomcat, al lado de los sitios creados en Alfresco, nos aparecerá la posibilidad de añadirlo a nuestros favoritos de IMAP, representado por un icono.

:: Cookies de nuestra página web. ¿Para qué sirve cada una?

A menudo una pregunta que nos hacen es qué cookies se están utilizando en mi página y para qué sirven. Para ver las cookies, podemos selecci...