22 de noviembre de 2015

:: Liferay. Soporte para nuevo idioma

Si bien Liferay da soporte a multitud de idiomas, puede ser que en un momento determinado tengamos que incluir uno nuevo no soportado por defecto.
En nuestro caso, para dar soporte al Asturiano (Bable) hemos seguido los siguientes pasos que describimos a continuación.

.- Añadir la siguiente entrada en el fichero portal-ext.properties
locales=ar_SA,eu_ES,bg_BG,ca_AD,ca_ES,zh_CN,zh_TW,hr_HR,cs_CZ,da_DK,nl_NL,nl_BE,en_US,en_GB,et_EE,fi_FI,fr_FR,gl_ES,de_DE,el_GR,iw_IL,hi_IN,hu_HU,in_ID,it_IT,ja_JP,ko_KR,lo_LA,nb_NO,fa_IR,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sr_RS,sr_RS_latin,sl_SI,sk_SK,es_ES,sv_SE,tr_TR,uk_UA,vi_VN, ast_ES

.- Copiar el icono de la bandera en:  (HOOK)
C:\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\html\themes\control_panel\images\languageC:\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\html\themes\classic\images\language

.- En el fichero web.xml ubicado en la siguiente ruta: (PLUGIN -EXT)
C:\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\WEB-INF
Añadir las siguientes lineas:
< servlet-mapping >
                               < servlet-name >I18n Servlet</ servlet-name >
                               < url-pattern >/ast/*</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
                < servlet-name >I18n Servlet</ servlet-name >
                < url-pattern >/ast_ES/*</ url-pattern >
</ servlet-mapping >

< url-pattern >/ast/c/portal/protected</ url-pattern >

< url-pattern >/ast_ES/c/portal/protected</ url-pattern >

.- Añadir los ficheros de traducciones siguientes:  (HOOK)
language_ast.properties
language_ast_ES.properties
.- Copiar los ficheros anteriores en la siguiente ruta:
C:\liferay-portal-src-6.1.1-ce-ga2\portal-impl\src\content

.- Establecer las preferencias de presentación en:
Portal > Configuración > Preferencias de presentación
es_ES,ast_ES

.- El fichero de recursos tienen que llamarse: Language_ast_ES.properties
En las pruebas realizadas, no cogía las traducciones utilizando Language_ast.properties, por lo que únicamente se utiliza Language_ast_ES.properties

.- En el fichero “liferay-hook.xml” es necesario añadir la entrada siguiente:

content/Language_ast_ES.properties

Estas son algunas guías básicas que pueden contener errores, por lo que cualquier aportación siempre es
 bienvenida.

19 de noviembre de 2015

:: Liferay. Generar fichero .ICS desde Velocity

Para generar un fichero .ICS con los eventos de la agenda desde una plantilla Velocity en el CMS Liferay, el código a utilizar es el siguiente:


#set ($serviceContext = $portal.getClass().forName("com.liferay.portal.service.ServiceContextThreadLocal").getServiceContext())
#set ($httpServletRequest = $serviceContext.getRequest())
##get the real themeDisplay object, not the $themeDisplay map
#set ($objThemeDisplay = $httpServletRequest.getAttribute("THEME_DISPLAY"))

#set ($exportURL = $portletURLFactory.create($httpServletRequest, "8", $objThemeDisplay.getPlid(), "ACTION_PHASE"))
#set ($temp = $exportURL.setWindowState("exclusive"))
#set ($temp = $exportURL.setPortletMode("view"))
#set ($temp = $exportURL.setParameter("struts_action", "/calendar/export_events"))
#set ($temp = $exportURL.setParameter("exportFileName", "events.ics"))


Sobre la capa con la clase "export-ics" aplicaremos los estilos que sean necesarios.

:: 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.

:: 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...