ZYLK INDUSTRY wants to accelerate its growth via BIND 4.0


Last Friday, September 16th the spin-off of ZYLK ZYLK INDUSTRY asked to join in the accelerator BIND 4.0.



BIND is the first startup accelerator offering access to high-level Industry 4.0 customers as you can read at their website.

Bind 4.0 is a public-private acceleration program that lasts 24 weeks and takes place in the Basque Country. It focuses on Industry 4.0 early-stage startups involved in big data, additive manufacturing, artificial vision, cloud computing, augmented reality, cybersecurity, cyberphysical systems and/or collaborative robotics.

They offer “A contract with one of our top industry firm partners for the development of an Industry 4.0 project.” and that is what we wanted the most. We already work for some of this companies on BigData applied solutions but we want to go further offering to Industry and IoT solutions.


web bind screen


We hope to find mentoring, support services, networking and our next contract from companies as CAF, CIE Automotive, CAF, Iberdrola, Euskaltel, Dannobat Group, Michelin, Repsol Petronor, ITP or ABB.

ZYLK Industry solution is based on the combination of the two most promising techniques in Industry 4.0: 360º data acquisition plus advanced analytics with BigData technology.


techs bigdata


Zylk is a ICT company, founded in 2004, specialized in JAVA open source developments and products. Its activity focuses on Enterprise Portals, Document Management, Security & Digital Signature solutions, Business Intelligence and BigData Solutions. We work with the most relevant products in its area: Liferay, Alfresco ECM, Hortonworks, Valamis, Pentaho and Sinadura.



Come to know our services and products to the next Librecon2016 Business and Open Technologies Conference in Bilbao. Check this event here 

Please, contact us for more information or pay attention to this blog.


Entrada publicada en Sin categoría | Comentarios cerrados

Zylk Industry is here Big Data and IoT together


Zylk Industry is here. Big Data and IoT together for our customers.



Logo zylk Industry










your industry is full of data, are you aware of that?



ZYLK Industry is a project that was born 2 years ago from the Big Data Team experience in Energy, Automotive, and Telecomunications industries. Our team is formed by professionals with extensive experience in Big Data, IoT, telecommunications, front-end interfaces and data analytics.

ZYLK Industry has given a step foward and has developed a non-intrusive 360º data adquisition device, M2M, endowed of distributed intelligence through which, upon captured data, we established a layer of advanced analytics and visualization that allows showing the process KPI’s and generating alerts. With this, we optimize patterns of energy consumption, reduce peak power demand, improve the OEE and enable cost reduction.


energy power demand picture


Beyond the applications that offer Analytics for Big Data, ZYLK Industry provides hardware and software solutions based on Hortonworks (zylk is already partner), Kaa project and Apache Hadoop Ecosystems, to  implement energy saving measures to the industrial sector.


Please, contact us for more information or pay attention to this blog.

Entrada publicada en Sin categoría | Comentarios cerrados

Watching your Libreoffice process for Alfresco transformations

A usual question of final users is that their Office files are not being previsualized in Alfresco. This may be for some reasons like:
 1. The office file is corrupted
 2. The office mimetype is not set correctly
 3. The office file is too big
 4. The Libreoffice process is not responding
In the last case, you will see that new MS-Office and Office documents are not being previsualized (any of them). In that cases, the first thing you should do is to check the Libreoffice process, by default in 8100 port:
  ps aux | grep soffice
If this process does not exist, or it seems to have problems, the manual solution is to restart Libreoffice just with a simply:
  $ALF_HOME/alfresco.sh start libreoffice
Sometimes it is necessary to kill the pid of the Libreoffice process, previously.
But there are better alternatives for the Alfresco admin. The first one is based on a nice plugin and a quartz job:
where you can define the corresponding cronjob in alfresco-global.properties
contentreich.officeWatchDog.cronExpression=0 */10 * * * ?
Another simple solution is check_libre.sh script in the crontab:
#! /bin/bash
# m h  dom mon dow   command
#0,15,30,45 * * * * /opt/alfresco/bin/check_libre.sh
if [[ -z `/bin/pidof ".soffice.bin"` ]]
  $ALF_EXE start libreoffice
  echo "$ALF_DATE" >> $ALF_LOG
The log will help you to track if you have many problems with Alfresco transformations and OODirect subsystem. If this happens, consider to have memory enough for the soffice process.
You can also use the next script for reference for starting Libreoffice:
And finally, in Enterprise Edition (although in this case, it is tracked via Jodconverter subsystem) you can also restart the Libreoffice subsystem via JMX, or to set multiple instances to jodconverter via Admin Console.
NOTE: In Alfresco 5.1.e you need to change alfresco.sh to the correct location of libreoffice script (assuming an installation with the linux installer and including libreoffice). Anyway you can always run:
zylk@alf5:/opt/alfresco51e/libreoffice/scripts$ sh libreoffice_ctl.sh start
libreoffice_ctl.sh : libreoffice started at port 8100
In alfresco.sh change:
Also the libreoffice_ctl.sh script needs to remove the slashes. Check this:
NOTE II: In Ubuntu you may also need:
sudo apt-get install libice6 libsm6 libxt6 libxrender1 libfontconfig1 libcups2 libxinerama1 libglu1-mesa
Entrada publicada en Sin categoría | Comentarios cerrados

My top Alfresco Addons

Recently we upgraded to Alfresco 201602GA (5.1.e CE) with all their new capabilities such as smart folders, new admin console or model manager. But once you installed Alfresco CE (or EE), you always need some extra Community power. This is a selection of our favourites for our Alfresco installations.
1. Javascript Console: Simply fantastic, essential plugin for administrators and developers in Alfresco installations. 
Also execute script addon in Share extras is quite useful in 5.x version , but it needs some changes for make it work in recent versions
2. Alfresco Site Creators: I do not remember a recent Alfresco Installation without this customization. Must have!
3. Alfresco Site Space Templates: The missing templates for Alfresco Sites.
4. Libreoffice Edit Online: No applet based, simple as webdav based edition hyperlink for protocol registering.
5. Uploader Plus: How many times does a client ask you for filling metadata before uploading the document ? 
6. Alfresco List Manager: Dynamic Lists administration for your Alfresco Share forms and content models. A simple way for avoiding redeploying constraint lists in content models continuously. It is very useful, when these data is not completely static, for example a list of clients.
7. Alfresco Bulk Import v.2.0: Enhanced Bulk Import Tool for (not inplace?) content migrations.
8. Trashcan Cleaner: Do no forget to take out the thrash.
9. PDF Toolkit: Useful PDF actions for content rules split, merge and many more.  
10. Alfresco Audit Analysis and Reporting: The BI reference project for Alfresco Suite.
For Alfresco 4.x users Audit Share is a very very nice addon --> https://github.com/atolcd/alfresco-audit-share
11. Alfresco Groovy Runner: Nice console for accesing Alfresco Java API. Well documented, with many examples.
12. Alfresco version by name: Very nice customization for the default behaviour when uploading documents in Share. 
Other admin basics for EE users are:
1. Support Tools for Enterprise Edition: A "must" have for every Alfresco Enterprise installation.
A JMX console like JMX term is quite useful --> http://wiki.cyclopsgroup.org/jmxterm/
2. Alfresco Nagios Plugin: A very useful check_jmx plugin for Alfresco (more adequate for Enterprise Editions) although basic ports monitoring and checks are also valid for Community Edition. 
More links:
Entrada publicada en Sin categoría | Comentarios cerrados

Change Alfresco ports in Alfresco 5

Sometimes we need to change the main ports of an Alfresco web application (i.e 8080 --> 9080), for example for running another Tomcat based app in your machine. This is a tip for Alfresco 5.x
* Change 8080, 8443, 8009 and 8005 connector ports in $ALF_HOME/tomcat/conf/server.xml
* Change JPDA 8000 in  $ALF_HOME/tomcat/bin/catalina.sh if used
* Change 8080, 8443 ports in $ALF_HOME/tomcat/shared/classes/alfresco-global.properties
* Change 8080 ports in $ALF_HOME/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml urls (at least 5 urls by default)
* Change 8080 and 8443 in: 
In Alfresco 4.x (with SOLR 1.4) you need :
If for any reason you have to run two Alfresco repositories in the same machine, you may have other port conflicts relating RMI (50500), FTP (2121), CIFS (1445,1137-1139), IMAP (1443) , SMTP (25), Hazelcast (5701) or Libreoffice (8100). You may need to check this:
Entrada publicada en Sin categoría | Comentarios cerrados

Java AutoCloseable interface

He estado haciendo unas prubas mínimas con las interfaz autocloseable introducida en java 7 ... y la verdad es que está muy bien y hace que quede el código típico de try{} cath{}  finally{} mucho más limpio. Dejo aquí un ejemplo básico de uno de sus posible usos.

public class HBaseUtil implements AutoCloseable
    private Connection connection;
    public HBaseUtil() throws IOException
        Configuration  conf = HBaseConfiguration.create();
        conf.set("zookeeper.znode.parent", "/hbase-unsecure");
        this.connection = ConnectionFactory.createConnection(conf);
    private Connection getConnection()
        return this.connection;
    public void add() throws IOException {
        //add element code
    public void close() throws Exception {
    public static void main(String[] args) throws IOException
        try (HBaseUtil hbu = new HBaseUtil())
        } catch (Exception e) {
            // TODO Auto-generated catch block


Entrada publicada en Sin categoría | Comentarios cerrados

Share action to copy an Alfresco link in your email client

Some time ago, we published an Alfresco addon for editing online with Libreoffice in Alfresco Share (via webdav protocol), in github. For this plugin, that works in Alfresco 4.x and 5.x versions, we need to register a protocol for using webdav url scheme (dav: or vnd.sun.star.webdav:) in our operating system. Recently, we made an update for Libreoffice 5.x in github.
Taking a similar aproximation, we developed another simple action for copying directly an Alfresco download URL via mailto: protocol, which is already registered in our OSes. I mean, when clicking in the corresponding action, your email client is opened with the download url for the file copied in the body of a message. Between the different download urls available, we chose http webdav url for getting some information about the paths and filenames. The github project is available here.
In fact, this is done in a similar way, when sharing a public url via email, but for public content.
This action is available in both Document Library and Document Details menus. The details menu is shown below:
When clicking for the first time and if a default application is not defined for the mailto: protocol (or url scheme), the browser will ask you for an application. Click in the right app and remember the chosen application. In the figure, I selected Zimbra, which is my email web client.
Finally, you will get something like this:
Entrada publicada en Sin categoría | Comentarios cerrados

How to avoid indexing full content in Alfresco

To avoid indexing full content in Alfresco, we have different aproximations:
1. From SOLR point of view (tested in SOLR 1.4 and Alfresco 4.2.5): 
In solrcore.properties (for workspace and archive store) set: 
This is a general setup (for all content types).
2. From Filesystem Bulk Import and/or CMIS APIs point of view: 
Add aspect cm:indexControl and use cm:isIndexed=true, and cm:isContentIndexed=false in your XMLs for Bulk import. In APIs, use addAspect and set the corresponding properties. 
This is highly customizable, for any given types used in your data imports or APIs.
3. From a custom model point of view: 
Create an aspect overriding cm:indexControl
<aspect name="my:doNotIndexContentControl"> 
    <title>Do Not Index Control</title> 
       <property name="cm:isIndexed"> 
       <property name="cm:isContentIndexed"> 
And then, set it as mandatory aspect for the custom content type. This is highly customizable, for a given custom type, defined in the repository.
Entrada publicada en Sin categoría | Comentarios cerrados

El futuro de sinadura (sinadura 5)

El ecosistema de sinadura, que zylk.net lleva gestionando y dinamizando desde hace unos 7 años, va a sufrir este año una transformación, o eso esperamos. Hasta ahora todos los proyectos que componen el ecosistema son proyectos con una base común pero sin una ligazón fuerte. Durante el año 2016 desde zylk.net vamos a tratar de impulsar varias acciones relacionadas con este ecosistema. La intensidad del impulso dependerá bastante de la financiación que consigamos para afontar este nuevo reto.

  • Integración de los dos principales servicios (sinadura desktop, cloudsign)
  • Autenticación en dos fases, basada en un QR y en un móvil, para disparar el proceso de firma delegada
  • Firma de documentos remotos (para la integración con aplicaciones de terceros) con el fin de permitir usar sinadura desktop en aplicaciones web (esto ya lo hace a día de hoy, sinadura desktop, usando webdav y el proyecto apache vfs que se integró en sinadura hace ya varios años. Esto se hizo para permitir la firma de documentos en el gestor documental alfresco).

Como se puede ver hay dos acciones que se encaminan a mejorar los dos productos principales del ecosistema. Y otra acción que se encamina a hacer que los procesos de firma de una organización se coordinen desde un sistema centralizado que controle, quién puede hace qué y desde qué dispositivo.

La integración de ambos desarrollos nos debería permitir la gestión de las firmas desde los siguientes puntos de vista

Firma delegada basada en servicios REST (con una sistema de auntenticación en 2 Fases)

  1. Para permitir realizar firmas corporativas
  2. Para permitir firmas de aplicación

Firmas en PC, integradas con las aplicaciones de una empresa

  1. Para permitir firmas de terceros sin tener que custodiar sus certificados
  2. Para permitir firmas personales con smartcards (dnie electrónico)

En esencia la idea es eliminar del ecosistema, el producto sinadura ECM y ampliar su funcionalidad para que permita firmar documentos no solo almacenados en alfresco ECM. Además perseguimos potenciar el uso de cloudsign, al integrar ambos productos para permitir cubirar las necesidades globales de firma de una empresa.


Para poder afrontar este reto, vamos a incorporar un proces de autenticación en dos fases a la plataforma cloudsign. El diagrama base de lo que se pretende hacer es el siguiente



Con estas dos mejoras de los productos del ecosistema vamos a poder hacer que ambos confluyan en una solución única. La idea de la confluencia es la descrita en el siguiente gráfico:

Veremos como se da el año (2016) y veremos si, desde zylk.net, somos capaces de traccionar esta nueva visión.

Entrada publicada en Sin categoría | Comentarios cerrados

API gateway architecture for microservices

Siguiendo con los anteriores artículos relacionados con los microservicios presentamos un nuevo diagrama de arquitectura de lo que se conoce como API-gateway. Que es una suerte de orquestador (y más) de las llamadas a distintos microservicios. En realidad las operaciones que realizan los microservicios suelen ser operaciones muy atómicas que aunque tienen valor de negocio necesitan ser orquestadas para poder representar una operación de negocio real.

Donde podemos ver a grandes rasgos la función de un API-Gateway. En el caso que nos ocupa en zylk.net para componer esta capa se va a usar, lo ya descrito anteriormente

Y el proyecto Hystrix de netflix. La idea es encapsular los servicios RCP con una capa de comandos hystrix para poder crear el API Gateway. Para la PoC que hemos definido se necesita

  1. Crear un primer comando hystrix que tarde en ejecutarse, pongamos 5 segundos
  2. Crear un segundo comando que tarde en ejecutarse 4 segundos

Una vez que tenemos esto, crearemos un cliente que invoque ambos comandos de dos maneras (existe una tercera basada en programación reactiva, que en este caso no vamos a usar) Síncrona

  • Síncrona

  • Asíncrona

Si ejecutamos ambos clientes podemos ver las diferencias de ejecución en ambos casos.

La verdad es que el proyecto hystrix de netflix es un gran proyecto que nos sirve para encapsular las llamadas a servicios de terceros. En este caso nos permite encapsular nuestros propios microservicios expuestos por yarn/avro-rpc. Además nos permite gestionar las asincronía y también implementa el patrón circuit-breaker, tan importante en los sistemas de información de nueva generación como los que empezamos a desarrollar en zylk.net

En este link os podéis descargar las 4 clases que se han usado para la PoC, para los que prefieren leer código.

Entrada publicada en Sin categoría | Comentarios cerrados