7 de mayo de 2017

:: Liferay. Tip para determinar si un portal está desarrollado en Liferay

Aunque existen multitud de extensiones que permiten identificar los detalles sobre la plataforma de desarrollo de un portal web, una forma rápida y sencilla de determinar si un portal está desarrollado con este gestor, sería:

.- Abrir la consola en el navegador (F12 en Chrome y seleccionar la pestaña "Console")

.- Escribir en la consola "Liferay" y pulsar Intro

Si esta petición nos devuelve un objeto, indicará que el portal web que nos ocupa está desarrollado con este gestor


Si por el contrario la respuesta obtenida es: "Liferay no está definido", indicará que este portal no está desarrollado con Liferay.

1 de mayo de 2017

:: Liferay. Ocultar detalles de la versión

Es habitual que en los portales desarrollados con el gestor Liferay, no se oculten los detalles de la versión desplegada. Como en otros CMS's quizás sería buena práctica ocultarlos por cuestiones de posibles vulnerabilidades, facilitando de esta manera el trabajo.

En un portal desarrollado en Liferay podemos ver que en las cabeceras aparece toda la información de la versión. Por ejemplo:

Liferay-Portal:Liferay Portal Community Edition 6.2 CE GA6 (Newton / Build 6205 / January 6, 2016)


Para ocultar los detalles de la versión deplegada, debemos añadir la siguiente línea en el fichero "portal-ext.properties".

http.header.version.verbosity=partial

Tras reiniciar el tomcat, la información que veremos en las cabeceras será algo como esto, donde no se dan detalles de la versión del gestor:

Liferay-Portal:Liferay Portal Community Edition


24 de abril de 2017

:: Tratar JSON desde C#

Es habitual tener que realizar una petición a una API para consumir un servicio, y que este nos devuelva el resultado en formato JSON del que extraeremos la información necesaria.

Aunque es una tarea sencilla, y únicamente a modo de recordatorio, para llevar a cabo esta tarea desde una aplicación C#, el código sería algo similar a este:


String url = "https://api.sunrise-sunset.org/json" + "?lat=" + txtLatitud.Text + "&lng=" + txtLongitud.Text + "&date=" + fecha;
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();

Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();

dynamic obj = JsonConvert.DeserializeObject(responseFromServer);

if (obj != null)

this.txtRespuesta.Text = responseFromServer.ToString();

this.txtSunrise.Text = obj.results.sunrise;
this.txtSunset.Text = obj.results.sunset;
}

reader.Close();
response.Close();


17 de abril de 2017

:: Alfresco. Importar usuarios desde un CSV

A la hora de crear varios usuarios en Alfresco, podemos hacerlo por medio de un fichero CSV, el cual debe seguir un formato específico.

Esta tarea es útil -por ejemplo- cuando tenemos que crear una relación extensa de usuarios, estableciendo cuotas de disco, o simplemente creando credenciales de acceso al gestor documental.

  • La información que puede contener es la siguiente:
  • User Name,First Name,Last Name,E-mail Address,,Password,Company,Job Title,Location,Telephone,Mobile, Skype,IM,Google User Name,Address,Address Line 2,Address Line 3,Post Code,Telephone,Fax,Email
  • Debe estar en UTF-8, ya que de lo contrario tendremos problemas con caracteres extraños
  • El separador debe ser el caracter "," (coma)

Si se ha especificado una dirección de correo electrónico para cada cuenta de usuario a crear, estos recibirán un mail con los datos de acceso (siempre y cuando las notificaciones se encuentren habilitadas).

Un ejemplo de fichero CSV para crear varios usuarios en Alfresco podría ser el siguiente:
import_usr01,Usuario 1, Apellidos 1,usr1@netic360.es,,import_usr01,netic360,Desarrollador web,Madrid,123456789
import_usr02,Usuario 2, Apellidos 2,usr2@netic360.es,,import_usr02,netic360,Desarrollador Liferay,Madrid,123456789
import_usr03,Usuario 3 , Apelllidos 3,usr3@netic360.es,,import_usr03,netic360,Desarrollador Liferay,Madrid,123456789
import_usr04,Usuario 4, Apellidos 4,usr4@netic360.es,,import_usr04,netic360,Desarrollador .NET,Madrid,123456789

Dentro de  nuestro Alfresco seleccionaremos "Administración" > "Usuarios"


Tras la pulsación del botón "Subir fichero CSV de usuarios", este fichero se subirá a nuestro Alfresco y será procesado, obteniendo los resultados de la operación.






11 de abril de 2017

:: CMIS. Conexión con Alfresco

Describiremos a continuación una prueba de concepto de conexión desde una aplicación desarrollada en C# con Alfresco, a través de CMIS.



¿Qué es CMIS?


De acuerdo a la definición que aparece en la Wikipedia, Content Management Interoperability Services (CMIS) o Servicios de Interoperabilidad de Gestión de Contenidos es un estándar abierto que permite a diferentes sistemas de gestión de contenidos interoperar a través de Internet. En concreto, CMIS define una capa de abstracción para el control de diversos sistemas de gestión de documentos y repositorios, que utilicen protocolos web.

¿Cómo nos conectamos con Alfresco a través de CMIS?

Para llevar a cabo la conexión, tendremos un Alfresco (por ejemplo instalado en local en el puerto 8282) y necesitaremos una función a la que le pasaremos 3 parámetros:

  • Ruta: Indica la ruta CMIS (http://localhost:8282/alfresco/api/-default-/public/cmis/versions/1.0/atom)
  • Usuario: usuario definido en Alfresco
  • Clave: clave de acceso a Alfresco


Estos dos últimos parámetros constituyen las credenciales de acceso a nuestro Alfresco.



Tras pulsar sobre el botón de login, se llamará a la siguiente función, que realizará la conexión a Alfresco a través de CMIS

/* * Conexión con Alfresco */
private static ISession ConexionAlfresco(String ruta, String usuario, String clave)
{
if (System.Diagnostics.Debugger.IsAttached)
  Console.WriteLine("Estableciendo conexión con Alfresco...");
try {
 Dictionary parameters = new Dictionary(); 
 parameters[DotCMIS.SessionParameter.BindingType] = BindingType.AtomPub; //Parámetros de  conexión 
 parameters[DotCMIS.SessionParameter.AtomPubUrl] = ruta;  parameters[DotCMIS.SessionParameter.User] = usuario;  parameters[DotCMIS.SessionParameter.Password] = clave; 
 SessionFactory factory = SessionFactory.NewInstance(); 
 IList repos = factory.GetRepositories(parameters); 
 ISession session = repos.ElementAt(0).CreateSession(); 
  return session; 
 } catch (Exception ex) { 
 Console.WriteLine("ERROR :: No se ha podido establecer la conexión con Alfresco"); 
 return null; 
 } 
}


Puesto que hemos llevado a cabo la conexión con Alfresco utilizando el estándar CMIS desde una aplicación C#, utilizaremos "DotCMIS".


22 de marzo de 2017

:: Pensamiento lógico. El acertijo de Einstein


Este sería un ejercicio práctico válido para todos aquellos que optan a un puesto de trabajo tecnológico en una supuesta entrevista.

Aunque este acertijo se le atribuye a Albert Einstein, no hay pruebas de que así sea; Sin embargo, se trata de un ejercicio que requiere la aplicación de un pensamiento lógico y estructurado para dar con la solución.

Premisas

1.- Hay cinco casas de cinco colores distintos
2.- Una persona con una nacionalidad diferente vive en cada una de las casas
3.- Los cinco dueños beben cada uno un tipo de bebida, fuman una marca de tabaco, y tienen un tipo de mascota
4.- Ningún dueño tiene la misma mascota, fuma la misma marca de tabaco, ni bebe la misma bebida

Pistas

1.- El británico vive en la casa roja
2.- El sueco tiene perros como mascotas
3.- El danés bebe té
4.- La casa verde está a la izquierda de la casa blanca
5.- El dueño de la casa verde bebe café
6.- La persona que fuma Montecristo cría pájaros
7.- El dueño de la casa amarilla fuma Partagás
8.- El hombre que vive en la casa del medio bebe leche
9.- El noruego vive en la primera casa
10.- El hombre que fuma Cohiba vive al lado del hombre que tiene gatos
11.- El hombre que tiene un caballo vive al lado del hombre que fuma Partagás
12.- El dueño que fuma Romeo y Julieta bebe cerveza
13.- El alemán fuma Cuaba
14.- El noruego vive al lado de la casa azul
15.- El hombre que fuma Cohiba tiene un vecino que bebe agua

El acertijo

¿Quién tiene un pez como mascota?

Buscando la solución

Teniendo en cuenta las premisas y las pistas anteriores, ¿sabrías dar con la solución?

Si no es así, una posible orientación para resolver el problema planteado sería disponer de papel y boli (o en su defecto una pizarra) donde iremos desgranando cada una de las pistas, hasta dar con la solución.

Inicialmente planteamos una tabla vacía con las premisas que tenemos.
Casa 1 Casa 2 Casa 3 Casa 4 Casa 5
Color




Nacionalidad




Beben




Fuman




Mascota





Posteriormente iremos rellenando la tabla con la información extraída de las pistas.
Casa 1 Casa 2 Casa 3 Casa 4 Casa 5
Color Amarillo Azul Rojo Verde Blanco
Nacionalidad Noruego Danés Británico Alemán Sueco
Beben Agua Leche Café Cerveza
Fuman Partagás Cohiba Montecristo Cuaba Romeo y Julieta
Mascota Gatos Caballo Pájaros Peces Perros



Tras ir cumplimentando paso a paso la tabla anterior con las pistas (no tienen por qué seguirse en orden), llegamos a la conclusión de que es la persona con nacionalidad alemana la que tiene peces como mascota.

15 de marzo de 2017

:: Archivo CSV. Error de formato SYLK

En ocasiones, cuando desde una aplicación generamos un fichero .csv y tratamos de abrirlo con Microsoft Excel, obtenemos el siguiente error:

Se ha detectado que “fichero.csv” es un archivo SYLK, pero no se puede cargar. Puede que el archivo contenga errores o que no tenga formato de archivo SYLK. Haga clic en Aceptar para intentar abrirlo con otro formato

Este error, que a menudo suele consumirnos bastante tiempo hasta dar con una solución, se debe a que el primer carácter que utilizamos (quizás el primer elemento de la cabecera) suele ser el literal "ID". Por ejemplo, queremos generar un fichero csv con un listado de los post de nuestro blog, incluyendo el identificador y el título del mismo.
Normalmente, como encabezado utilizamos: "ID;Título".

Precisamente es el literal "ID" el que provoca que al intentar abrir -desde excel- el fichero csv generado nos devuelva un error de formato.

Para saber qué es un fichero SYLK, puedes consultar la wikipedia: https://es.wikipedia.org/wiki/SYLK

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