19 de noviembre de 2015

:: Doxygen. Generador de documentación

Existen multitud de herramientas para documentar el código fuente, pero hoy describiremos brevemente una de ellas, utilizada ampliamente y con una reducida curva de aprendizaje.

Según la definición que figura en la Wikipedia, Doxygen es un generador de documentación para C++, C, Java, Objective-C, Python, IDL (versiones Corba y Microsoft), VHDL, PHP, C# y D.
Dado que es fácilmente adaptable, funciona en la mayoría de sistemas Unix así como en Windows y Mac OS X. La mayor parte del código de Doxygen está escrita por Dimitri van Heesch.


Un ejemplo de comentarios para documentar una clase:
/**
 * @class DBConnection
 * @author Nombre de empresa o autor
 * @version 1.0
 * @date 2015-11-13
 * @brief Clase para crear conexiones a la base de datos basandose perfiles que encapsula
 * a la clase PDO de PHP.
 * @file   DBConnection.php
 * @todo Tareas pendientes a realizar
 * - Primera cosa pendiente
 * - Segunda cosa pendiente
 * - Tercera cosa pendiente
 */
/**
 * Esta clase establece las conexiones a la base de datos basándose en perfiles que encapsula
 * a la clase PDO de PHP.
 * Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet ,
 * Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet ,
 * Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet
 * Lorem ipsum dolor sit amet .
 * Lorem ipsum dolor sit amet .
 */ 
Una vez configurado doxygen con la ubicación del código fuente y la carpeta en la que almacenará la salida (en el formato seleccionado), recorrerá los ficheros buscando las directivas correspondientes (@class, @author, @version,....) generando la documentación.
Su uso es muy sencillo y una vez comentado nuestro código fuente, la herramienta nos facilitará la generación de la documentación en un formato que nos permitirá su consulta de una forma ágil.


Información y descarga: http://www.stack.nl/~dimitri/doxygen/

16 de noviembre de 2015

:: Wordpress. Error: "No input file specified"

En alguna que otra ocasión, tras la instalación de Wordpress el portal devuelve el siguiente error al intentar acceder a cualquiera de las páginas: "No input file specified".

Esta situación suele producirse en algunos servicios de hosting, para lo que es importante leer la documentación, evitando perder tiempo en búsquedas de posibles soluciones.


En el caso del servicio de hosting Aruba, la solución al problema consistirá en seguir los siguientes pasos.
1.- Desde el panel de administración web deberemos seleccionar: "Hosting Linux > Hosting Services"

2.- Tras mostrar las distintas opciones, seleccionaremos la entrada: "Personalización del archivo PHP.INI".
 

3.- Entre las opciones disponibles seleccionaremos la opción: "cig.fix_pathinfo"


De esta manera, tras seleccionar la opción citada anteriormente, todas las entradas del portal funcionarán correctamente.

11 de noviembre de 2015

:: Liferay. Comprobar si una página es pública o privada

Cuando estamos desarrollando en Liferay, en alguna ocasión necesitamos saber si una página es pública o privada.
Para llevar a cabo esta tarea en este CMS, podemos hacerlo desde Velocity con el siguiente código:
#if($layout.isPublicLayout())
#else
#end
Para cada petición "request", $layout representa la página actual a cargar.
De esta manera, el código anterior podemos insertarlo en cualquier plantilla Velocity que tengamos en el tema, normalmente en:

  • portal_normal.vm
  • init_custom.vm

8 de noviembre de 2015

Servidores. Entendiendo la memoria

Un diagrama para entender un poco más la memoria.

YoungGen: Es el lugar donde se almacenan datos durante un corto periodo de tiempo, y está dividida en dos partes:
  • Eden Space: Cuando un objeto se crea con el método "new", se reserva memoria en este espacio.
  • Survivor Space: Es la cola en la que permanecen los objetos tras un proceso "garbage collection" realizado sobre "Eden Space".
Tenured Generation: Esta cola de memoria contiene objetos que han "sobrevivido" después de múltiples procesos "garbage collection" realizados sobre "Survivor Space".
  • OldGen : Esta cola contiene básicamente espacio físico y virtual (reservado) en el que permanecerán aquellos objetos que "han sobrevivido" tras un proceso "garbage collection" realizado sobre el espacio "YoungGen".
Permanent Generation: Como su propio nombre indica, esta cola de memoria contiene clases, metadatos y descriptores de información por lo que el espacio "PermGen" siempre está reservado para clases y todo aquello ligado a estas, como por ejemplo miembros estáticos.
Java8 Update: PermGen se ha reemplazado por Metaspace, que es muy similar.
La diferencia principal es que "Metaspace" redimensiona el tamaño dinamicamente, por ejemplo: Espacio Java Metaspace: ilimitado (por defecto)
Code Cache (Virtual or reservado) : Si estamos utilizando la Máquina Virtual HotSpot esta incluye el área "Code Cache" que contiene la memoria que será utilizada para compilación y almacenamiento de código nativo.

:: Liferay. Crear usuarios sin correo electrónico

En ocasiones es necesario crear usuarios en Liferay sin que estos lleven asociada una dirección de correo electrónico. Para ello deberemos editar el fichero portal-ext.properties y añadir la siguiente linea:
users.email.address.required=false
Podemos añadir además la siguiente linea para que al usuario se le genere -de forma automática- una dirección de correo electrónico:
users.email.address.auto.suffix=@dominio.extension

Donde el literal "dominio.extension" lo sustituiríamos  por el que sea necesario, por ejemplo: "netic360.com"

De esta manera, se crearían usuarios sin especificar una dirección de correo electrónico, generándose una -de forma automática- para estos.

30 de octubre de 2015

:: Liferay. Problema con Javascript minifier

Aunque el funcionamiento del código era correcto, al acceder por primera vez a ese contenido (en este caso en un portal desarrollado sobre el CMS Liferay), en el log aparecía un mensaje de error similar a este:

ERROR [ajp-8009-1][MinifierUtil:101] 71: 73: missing name after . operator
ERROR [ajp-8009-1][MinifierUtil:101] 1: 0: Compilation produced 1 syntax errors.
ERROR [ajp-8009-1][MinifierUtil:79] JavaScript Minifier failed for

Al tratarse de un error de sintaxis, la primera tarea fue comprobar que efectivamente no existiera algún error sintáctico en el código. Tras perder un poco de tiempo, aparentemente, todo era correcto aunque en el log el mensaje seguía apareciendo.

En una de las lineas del código aparecía lo siguiente (cuya sintaxis es correcta):
video.thumbnail=response.items[i].snippet.thumbnails.default.url;

Tras buscar alguna solución, encontré algo relacionado con el "dot notation" y "bracket notation".
video.thumbnail=response.items[i].snippet.thumbnails['default'].url;

La solución para evitar ese mensaje de error en el log, era sustituir la palabra reservada "default" por la codificación utilizando "bracket notation".


27 de octubre de 2015

:: Alfresco. Cómo deshabilitar la cuenta de invitado

En una implantación del gestor documental Alfresco puede ser interesante deshabilitar la cuenta de invitado.
Una forma de llevar a cabo esta tarea es modificando el fichero: "alfresco-global.properties" añadiendo la siguiente línea:
alfresco.authentication.allowGuestLogin=false

:: Liferay DXP 2026. Habilitar RSS

En la versión Liferay DXP 2026 para habilitar las fuentes de datos RSS debemos seguir los pasos siguientes: 1.- Accederemos a la Configuraci...