Para configurar el envío de emails en Alfresco, debemos editar el fichero alfresco-global.properties que es donde está gran parte de la configuración de Alfresco. Este fichero normalmente está dentro de la carpeta shared y classes del servidor tomcat, en una ruta similar a esta:

/opt/alfresco-community/tomcat/shared/classes

Una vez en el fichero, añadiremos la siguientes líneas dependiendo nuestra configuración de envío de email:

mail.host= miservidor.com
mail.port=25
mail.protocol=smtp
mail.username= alfresco@midominio.com
mail.password=mipassword
mail.smtps.starttls.enable=false
mail.smtps.auth=true

Una vez configurado, pararemos e iniciaremos el servidor de Alfresco y ya debería funcionar

sudo /etc/init.d/alfresco stop

sudo /etc/init.d/alfresco start

Si no funcionase (por ejemplo porque el servidor requiera certificados, TLS, es otra ip, otro puerto etc…), con la configuración por defecto, no sabremos el porqué no se envía, ya que en el log de Alfresco no aparece nada. Para solucionarlo, podemos habilitar a que Alfresco nos muestre en el log porqué no puede enviar el correo.

Para ello, debemos habilitar el debug del envío de correo en el fichero custom-log4j.properties:

log4j.logger.org.springframework.mail.javamail.JavaMailSenderImpl=debug

en la siguiente ruta.

/opt/alfresco-community/tomcat/shared/classes/alfresco/extension

Una vez reiniciemos el servidor, ya veremos en el log de Alfresco el porqué no envía emails.

/opt/alfresco-community/tomcat/logs/catalina.out

Una configuración también interesante para comprobar que funciona el envío de emails, es obligar a que siempre que se inicie el servidor de Alfresco, nos envíe un email de prueba. Esto lo podemos hacer fácilmente añadiendo estas opciones al fichero de configuración alfresco-global.properties de Alfresco :

mail.testmessage.send=true
mail.testmessage.to=micorreo@midominio.com
mail.testmessage.subject=Alfresco Iniciado

Es muy útil mientras estáis configurando el servidor de correo en Alfresco

En este post, vamos a explicar cómo migrar una máquina virtual de proxmox en un servidor en producción a un virtualbox en local para poder hacer pruebas.

Proxmox es un servidor virtual de máquinas virtuales muy similar a hyper-v e vmware que funciona como una distribución de linux y en donde podemos montar las distintas máquinas virtuales que necesitemos.

Entorno gráfico de Proxmox

Entorno gráfico de Proxmox

Para poder migrar una máquina virtual de proxmox a una máquina local para hacer pruebas, debemos descargarnos el fichero del disco duro de la máquina virtual, normalmente en formato qcow2. Para ello, usamos WINSCP para conectarnos por ssh al proxmox y descargarnos el disco duro virtual. Normalmente las máquinas virtuales suelen estar en esta ruta, aunque eso depende de cada instalación.

/var/lib/vz/images

Una vez tenemos descargado el disco duro virtual en formato qcow2, debemos transformarlo en un formato que virtualbox pueda entender, como por ejemplo el formato vdi. Para la transformación, podemos utilizar qemu, un software muy interesante que hace transformaciones entre formatos virtuales.

Para transformarlo usamos el comando:

qemu-img convert -f qcow2 “nombre del fichero qcow2” – O vdi “nombre del fichero vdi”

Transformar formato qcow2 a vdi con qemu

Transformar formato qcow2 a vdi con qemu

Una vez transformado, veremos que aparece un nuevo fichero vdi ya compatible con virtualbox, el cuál podemos anexar en una máquina virtual creada con virtualbox.

Anexar disco duro virtual vdi a VirtualBox

Anexar disco duro virtual vdi a VirtualBox

 

Ya lo último que nos quedará será actualizar las “Guest Aditions” de VirtualBox, para que la máquina migrada de proxmox a VirtualBox pueda reconocer todos los drivers locales de nuestra máquina local y por ejemplo podamos usar la red, agrandar y estirar la pantalla y resolución, etc..

Añadir las Guest Addtions a una máquina virtual

Añadir las Guest Addtions a una máquina virtual

 

Añadir las Guest Addtions a una máquina virtual

Añadir las Guest Addtions a una máquina virtual

Y ya tenemos una máquina en local, lista para nuestras pruebas

Hace poco tuve que hacer una implantación de moodle en Windows y quería explicar los pasos a seguir para hacer una instalación segura y cuando digo segura me refiero a personalizarla adecuadamente sin las opciones/paquetes que vienen por defecto.

Lo primero que tenemos que hacer es descargarnos moodle para Windows usando el zip desde la propia página:

https://download.moodle.org/windows/

Este zip viene con una distribución de xampp, la cuál para la instalación viene muy bien porque trae la base de datos mysql (ahora mariadb), el servidor web apache y el php configurado. Si descomprimimos veremos que podemos arrancar xampp-control el cuál nos permite acceder al panel de control de xampp para arrancar apache y mysql que es lo que necesitamos para instalar moodle.

Panel de xampp con los servicios de Apache y MariaDB

Panel de xampp con los servicios de Apache y MariaDB

Una vez tenemos apache y mariaDb arrancados ya podemos acceder por navegador a la instalación de moodle usando el nombre de máquina, localhost ó 127.0.0.1

Acceso a la instalación de moodle

Acceso a la instalación de moodle

Inicialmente moodle nos pedirá el idioma en el que queremos instalar moodle, las rutas físicas donde va a instalar y la conexión con la base de datos.

 

Rutas de instalación de moodle

Rutas de instalación de moodle

 

Conexión con la base de datos

Conexión con la base de datos

Aquí tenemos el primer gran problema de seguridad. Por defecto mysql o mariaDB o vienen sin password para root o con un password que desconocemos, y esto hay que cambiarlo para tener nuestro propio password seguro. La contraseña de root de la base de datos debe ser distinta de la de admin de moodle. Para hacer esto, abrimos una ventana de comandos y accedemos a la carpeta bin dentro de mysql en xampp y ejecutamos un par de comandos:

mysql -u root

Este comando nos ejecutará un intérprete de mariaDB como root, osea nos permite conectarnos a la base de datos como root, con lo que ya podremos cambiar la contraseña. Con el segundo comando cambiamos la contraseña de root:

SET PASSWORD FOR root@’localhost’ = PASSWORD(‘newpassword’);

Una vez configurada la contraseña de root de mariaDB, ya podemos avanzar en la configuración de moodle. Al avanzar, veremos como moodle crea y configura la base de datos, nos pide que cambiemos el password de admin de moodle (este será el administrador principal de moodle por lo que hay que poner un password complejo) y un nombre largo y corto a nuestra plataforma y con eso ya tenemos moodle.

Uno de los problemas que vamos a tener con esta instalación es el panel de xampp. En cuanto apaguemos el ordenador o cerremos sesión, se cierra todo. Para evitarlo, podemos crear servicios de la base de datos mariadb y del servidor web apache para que arranquen solos cuando se inicia el servidor. Dentro de cada una de las carpetas de dichos softwares, tenemos comandos para crear dichos servicios:

httpd.exe -k install -n “Apache2.4”

mysqld –install

 

Para mejorar la seguridad de nuestro moodle, existe un informe muy interesante donde nos dice cómo mejorarla. Para ello accedemos a administrador del sitio, informes, información general de seguridad. Cuanto más estatus en OK veamos mejor.

Informe de seguridad en moodle

Informe de seguridad en moodle

 

Entre estas opciones, por defecto viene mal configurado la opción de visualización de errores en php. Un atacante puede forzar errores en moodle los cuáles son muy útiles para ver la estructura interna de la instalación. Para cambiarla, hay que acceder al fichero php.ini e indicar:

display_errors = Off

Otra opción de seguridad a cambiar (necesaria para instalar moodle), es que por defecto podemos volver a llamar a la instalación de moodle y un atacante pueda sobreescribir nuestra instalación. Para evitarlo, hay que cambiar el permiso de escritura del fichero config.php de la carpeta de moodle. Para ello, lo ideal es quitar la herencia de permisos en Windows Server y poner a “Todos” los usuarios permiso de lectura.

Otro de los típicos valores que solemos configurar en moodle es la capacidad de subida de archivos en php. Por defecto son 8Mb que se puede quedar muy corto para ficheros de cursos. Para ampliarlo, accedemos al fichero php.ini y cambiamos los parámetros post_max_size y upload_max_size a nuestras necesidades.

Por último nos queda configurar el look & feel, lo cuál se puede hacer desde Administración del sitio, Apariencia. Aquí normalmente usaremos la opción Logotipos para añadir el logo de la empresa/organización donde estamos montando moodle y usaremos la opción selector de temas para cambiar el aspecto de moodle usando un tema:

Los temas son personalizaciones hechas con CSS, HTML, colores que podemos instalar en moodle para cambiar su aspecto por completo. Los temas podemos crearlos nosotros mismos, o podemos descargarlos desde la web de moodle

https://moodle.org/plugins/browse.php?list=category&id=3

 

Para instalar un tema en moodle, lo descargamos y descomprimimos dentro de la carpeta themes dentro de la carpeta moodle. Una vez descomprimidos y arrancado otra vez el servidor, veremos que los temas nos aparecen en el selector de temas. Sino aparecen, podemos usar la opción Borrar caché de temas para limpiar la caché de moodle y forzar a leer la carpeta de temas.

Borrar caché temas

Borrar caché temas

 

 

Uno de los conceptos que más de moda hay en internet a día de hoy es el “machine learning” y que está dando mucho que hablar. Hoy en día parece que sino sabemos de “Big Data”, “machine learning”, “business intelligence”, “cloud”, parece que no sepamos de nada. Es por ello que en este post, vamos a intentar entender qué es esto del “machine learning”.

 

El machine learning como su nombre indica, significa aprendizaje automático; en wikipedia tenemos una buena definición. ¿Qué significa esto? Pues es una rama de la inteligencia artificial que intenta diseñar técnicas para que las máquinas puedan aprender. Pensando en esta definición, podemos pensar en ciencia ficción, robots, algo lejano a nosotros.. y esto ¿Cómo cuadra en las empresas? ¿Por qué está tan de moda?

Porque gran parte del know-how obtenido de la inteligencia artificial, ahora lo podemos aplicar al análisis predictivo y eso es en definitiva el machine learning. Hoy en día las empresas son muy dinámicas y ya no sirven los datos de reportes de BI de las ventas del mes pasado. Hoy en día se necesitan a diario y quizás más importante, esos análisis se necesitan “Antes”, osea análisis predictivo y saber por ejemplo a qué precio debo vender: no intentar un análisis a posterior como siempre se ha hecho, sino un análisis predictivo y ahí es donde los algoritmos del aprendizaje automático pueden ayudar.

Para entenderlo mejor y de una forma muy práctica, aconsejo seguir este tutorial de la página de Microsoft Azure.

https://azure.microsoft.com/en-us/documentation/articles/machine-learning-create-experiment/

En este tutorial de menos de 1 hora, se detalla paso a paso cómo crear un experimento en Azure ML, osea (Azure Machine Learning) que es la parte de Azure que se dedica al Machine Learning y lo más importante, vemos cómo podemos sacarle uso al aprendizaje automático. Veamos algunos detalles:

  • Inicialmente podemos acceder al Azure Machine Learning Studio de forma gratuita sin necesidad de tener cuenta de Azure, de Office365, eso sí por tiempo limitado, pero que para demos es muy útil.
  • En este entorno muy similar a Azure, vemos que tenemos la posibilidad de crear experimientos o cargar datasets propios.  El tutorial trata de explicar que a partir de los datos históricos que tenemos de automóviles, con los algoritmos del machine learning, somos capaces de predecir el precio al que hay que vender los coches (análisis predictivo).
  • En el tutorial se usa un dataset de automóviles que hay de prueba donde claramente se ve el precio de los coches y el resto de características de los coches.
Conjunto de datos inicial donde está el precio

Conjunto de datos inicial donde está el precio

  • Si seguimos el tutorial vamos añadiendo módulos para procesar los datos, definir reglas, aplicar algoritmos de aprendizaje, predecir un precio…
Módulos de Azure Machine Learning Studio

Módulos de Azure Machine Learning Studio

  • A medida que vamos añadiendo módulos, vemos cómo aparece el esquema de todos los pasos y las conexiones entre unos y otros.
Esquema con todos los módulos en Azure ML

Esquema con todos los módulos en Azure ML

  • Uno de los pasos más importantes, es añadir los algoritmos de aprendizaje. Si seleccionamos el módulo de Machine Learning, podemos encontrar multitud de estos algoritmos y que son los que nos van a permitir predecir el valor del precio.
Algoritmos de regresión

Algoritmos de regresión

Algoritmos de clasificación

Algoritmos de clasificación

 

  • Una vez tenemos los pasos bien definimos, los algoritmos seleccionados… entrenamos el experimento para que la máquina “aprenda”, osea que se aplique el algoritmo a los datos, para que en este caso, prediga el valor de venta de los coches. Para ello disponemos del botón Run.
Entrenar a la máquina

Entrenar a la máquina

  • Una vez entrenado el conjunto, podemos volver a abrir el dataset y veremos los datos predichos. En este caso vemos la columna del precio y el valor predicho de venta según el algoritmo de aprendizaje.
Dataset con los datos predichos

Dataset con los datos predichos

 

 

  • Como cualquier experimento, también podemos saber el error que hemos cometido
Error cometido en el análisis de los datos

Error cometido en el análisis de los datos

 

Y aquí es donde podemos ver realmente la utilidad del machine learning, osea el poder aplicar algoritmos del  aprendizaje automático a nuestros datos diarios de la empresa, para por ejemplo poder predecir cómo irá una futura venta, a analizar a qué precio voy a tener que vender un nuevo producto para ser más competitivo.

Uno de los grandes dolores de cabeza de SharePoint es cómo personalizar los formularios. Con SharePoint podemos utilizar la maravillosa funcionalidad de las listas personalizadas para simular cualquier base de datos, pero cuando vamos a editar cualquier contenido, nos encontramos con el típico formulario de una custom list, que es feo y poco usable: todos los campos van uno detrás de otro con lo que sí o sí te encuentras con un scroll lateral y además con espacio vacío en la parte derecha.

Entonces intentamos ver cómo personalizar ese formulario y nos encontramos con varias formas:

InfoPath: mejor lo dejamos… es antiguo y Microsoft quiere dejarlo de usar
PowerApps: la mejor opción, si lo tenemos instalado y configurado…
Designer: con la versión 2013 ya nos quitaron la versión web y en 2016 no existe…

Normalmente optamos por la versión de Designer, pero cuando abrimos los formularios nos encontramos con un componente que tiene todos los campos, pero no podemos acceder a él. Podemos añadir código arriba o abajo del formulario, pero no en los campos. Por ejemplo ¿y si quiero poner los campos en 2 columnas para aprovechar mejor el espacio?.

Por suerte, con el Editor de contenido se pueden hacer milagros…

La idea es muy sencilla: creamos un html y un javascript que añadimos a la librería de siteassets y añadimos 2  editores de contenido al formulario que queramos editar.

Componente de SharePoint que permite añadir html, javascript, css...

Componente de SharePoint que permite añadir html, javascript, css…

En uno de ellos enlazamos el javascript y en el otro el html personalizado subidos en la librería de SiteAssets. El Javascript es así:

 

Javascript que subimos a SharePoint

Javascript que subimos a SharePoint

En el script con jquery vamos recorriendo los campos del formulario usando data-displayName. Fijémonos que usa un span denominado hillbillyForm que es el que luego referencia en el html como una class.

El html es muy sencillo, simplemente ponemos en celdas de tablas los campos del customList y como class asociamos hillbillyForm, en este caso las columnas de Incidencia y Familia.

Html que añadimos a SharePoint

Html que añadimos a SharePoint

El html lo formateamos con tablas, capas, css o como queramos y una vez subido y asociado a SharePoint, voilá veremos cómo el formulario se personaliza.

En esta web tenemos la explicación del creador de este script

http://www.markrackley.net/2013/08/29/easy-custom-layouts-for-default-sharepoint-forms/

y en este video, se detalla paso a paso cómo hacerlo:

 

Funciona tanto en SharePoint Online como OnPremise

Un detalle: para que SharePoint pueda integrar y descargar correctamente el javascript y el html personalizado, es necesario desactivar la característica Estrategia de descarga mínima.

Desactivar la característica Estrategia de descarga mínima

Desactivar la característica Estrategia de descarga mínima

 

https://msdn.microsoft.com/en-us/library/office/dn456544.aspx

 

Desde hace tiempo, estamos oyendo que Microsoft quiere deshacerse de InfoPath, e incluso se llegó a anunciar su muerte, aunque estemos tranquilos: se seguirá soportando hasta 2016, eso sí InfoPath 2013…

http://www.qore.com/noticias/15610/Microsoft-anuncia-el-final-de-InfoPath

https://blogs.msdn.microsoft.com/microsoft_infopath_bloggers/2016/03/01/infopath-is-not-included-in-office-2016/

De hecho, en SharePoint 2016 ya no disponemos ni de InfoPath 2016 ni de Sharepoint Designer 2016, ni de la versión Foundation… por lo que la idea es ir eliminando esta tecnología antigua y obsoleta.

¿Y qué opciones tenemos?

Pues una de las opciones que más fuerza está teniendo es PowerApps. PowerApps es una tecnología que permite al usuario crear sus propias bases de datos, o aplicaciones en la nube. Como cualquier aplicación,  necesita de unos datos y PowerApps puede tener como origen Dynamics CRM, SalesForce, y una lista de sharepoint… y aquí es donde tiene su gran ventaja: Podemos crear una aplicación de PowerApp a partir de una lista de SharePoint y esta aplicación es accesible desde un móvil Android por ejemplo. Veamos qué fácil es hacerlo:

  1. Creamos una lista de SharePoint donde vamos a registrar incidencias y metemos algunos datos.
Lista de SharePoint con incidencias

Lista de SharePoint con incidencias

2. Seleccionamos el botón de PowerApps

Seleccionamos PowerApps desde SharePoint

Seleccionamos PowerApps desde SharePoint

3. Aparece un diseñador web en donde podemos editar formularios, vistas, añadir botones, layouts, añadir datasources… de una forma visual y muy sencilla. Cuando acabemos, pulsamos el botón Save del menú File para publicar la aplicación en PowerApps.

Editor web de PowerApps

Editor web de PowerApps

4. Accedemos a esta misma aplicación desde un móvil Android

 

Aplicación de PowerApp desde un móvil Android

Aplicación de PowerApp desde un móvil Android

 

Uno de los grandes problemas que tiene InfoPath es que no es para uso móvil y es una tecnología anticuada. En cambio desde PowerApp, hemos publicado la lista de SharePoint de una forma muy muy sencilla y es accesible desde cualquier dispositivo y conectando a nuestro SharePoint.

 

 

Hace poco he tenido un requisito en una implantación de CRM en la que se pedía trasformar una relación existente 1:N a N:N. En concreto en la ficha de clientes, existía un campo denominado “tipo de compañía” el cual era un campo de búsqueda a una entidad de tipo de compañía. Ese tipo de campo, dynamics CRM lo modela como una relación 1:N, y significa que una cuenta sólo puede ser de 1 tipo de compañía.

Los requisitos cambiaron y el cliente solicitó que una cuenta pudiera tener más de 1 tipo de compañía, osea una cuenta puede ser de varios tipos de compañía, con lo que la relación cambia a N:N y se complica bastante.

Las relaciones 1:N se manejan de una forma muy sencilla y de hecho, se añaden como campos en las vistas y es posible obtener la información a Excel rápidamente.

Una vez tengo los datos exportados a Excel de la relación 1:N, añado los datos que faltan y reimporto en dynamics CRM a la relación N:N, pero ¿Cómo lo hago?, ¿en qué tabla?.

En dynamics CRM, cuando creamos una relación N:N, automáticamente crea una tabla intermedia entre las dos entidades N:N. En el ejemplo, hay una tabla de cuentas, otra tabla de tipo de compañía y otra tabla intermedia en donde se almacenan registros que relacionan cuentas con tipo de compañia, así una cuenta puede tener muchos tipo de compañía y un tipo de compañía puede estar en muchas cuentas.

Relaciones N:N en dynamics CRM

Relaciones N:N en dynamics CRM

El problema es que desde la interfaz de dynamics crm no es posible acceder a esta tabla intermedia, con lo que no es posible reimportar los datos que exportamos previamente.

Por suerte, tenemos esta maravillosa herramienta en codeplex, que ya nos ha salvado en más de un apuro: XrmToolBox.

XrmToolBox es una herramienta desarrollada en codeplex que es gratuita y que como su nombre indica es una caja de herramientas para dynamics CRM. Muchas de las cosas que no podemos hacer con la interfaz, podemos hacerlo desde XrmToolBox. Precisamente una de estas herramientas es Manage N:N relations, el cual nos permite gestionar la tabla intermedia de las relaciones N:N de dynamics CRM

 

Manage NN relationships

Manage NN relationships

 

Si cargamos esta herramienta del XrmToolBox nos aparece esta pantalla donde podemos especificar las dos entidades N:N de la relación (First Entity y Second Entity), la tabla intermedia (Relationship), los dos campos por los que quiero relacionar las dos tablas en Mapping attribute y el fichero csv que quiero importar.

 

XrmToolBox

XrmToolBox

 

Pulsamos en Importar y !voila!, importa los datos perfectamente en la tabla intermedia. De esta forma, convierto mi relación 1:N en una relación N:N gracias a XrmToolBox.

A %d blogueros les gusta esto: