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

22 de septiembre de 2015

:: Obtener la versión de wordpress

Cuando desarrollamos un portal en Wordpress quizás deberíamos ocultar la versión con la que fue desarrollado ya que ello podría constituir una vulnerabilidad.
Esta información podemos encontrarla en dos ficheros: 1.- La meta etiqueta "generator"
Esta metaetiqueta se genera en el fichero "header.php" de la forma siguiente:
<meta name="generator" content="WordPress <?php bloginfo('version'); ?>" />

2.- El fichero readme.html ubicado en el raíz del sitio e incluido en cada instalación estándar de Wordpress.

Las soluciones serían:
  • En el primer caso sobreescribir este contenido para no mostrar la información que estamos comentando
  • Eliminar o sobreescribir el fichero readme.html

1 de enero de 2015

:: Upload de ficheros. Error: Objeto Request error 'ASP 0104 : 80004005'

En el desarrollo con ASP al intentar subir un fichero al servidor obtenemos el siguiente mensaje de error:
Objeto Request error 'ASP 0104 : 80004005'

En la mayoría de las ocasiones indica que se ha producido un fallo al intentar subir el fichero al servidor web debido a que el tamaño máximo configurado para la subida de ficheros es menor que el tamaño del mismo.

Para modificar este valor, debemos ir a la carpeta del IIS (Internet Infomation Services) ubicada en la siguiente ruta y buscar el fichero:
c:\windows\system32\inetsrv\metabase.xml

Dentro del fichero buscaremos la entrada: "AspMaxRequestEntityAllowed="204800"

Por defecto, en w2003 Server, el tamaño máximo son 200KB por lo que modificaremos este valor según nuestras necesidades.

:: Liferay. Obtener los usuarios activos desde Groovy

Una solución rápida para obtener la relación de usuarios activos en Liferay 7.4 es por medio de un script en Groovy. Para ello accederemos a...