En esta, cada vez más larga serie de Made In Spain, y donde incluyo todos los desarrollos y desarrolladores latinoamericanos, hoy traigo una aplicación sorprendente.
Imagínate que tienes que tratar un fichero en texto que tenga unas cuantas decenas o centenas de Gigabytes de tamaño. E imagínate lo que puede suceder si lo intentas abrir con algo como el Notepad.
Pues para solucionar esta problemática extraña pero real, Carles Royan se puso las manos a la obra y creó este editor para ficheros de texto extremadamente grandes llamado JalaText.
Características
La primera impresión al entrar en la página en donde puedo descargarme la herramienta, o comprar una versión más completa, es que “la ha hecho un programador“. Esa sombra negra en las letras del logotipo, ese gris (todo programador tiene el gris como color fundamental en el diseño gráfico), esa tipografía árida y funcional. Ese menú superior sin efectos de rollover o movimiento que pueda equivocar al navegante en hallar la información. Vamos, que es un rato fea.
Pero lo realmente importante es que bajo esta fachada de practicidad en estado puro, tenemos acceso a una poderosa herramienta de tratamiento de ficheros con tamaños superiores a 1Gb.. Lo cual, en muchos casos, no es nada trivial. Como por ejemplo, cuando tenemos que pegarnos con un log interminable.
Dándole un vistazo a sus características podría señalar las que nos indica la propia web:
-
Powered by Java. Escrito en Java, por lo que se ejecuta en Windows, Mac OS X, Linux, Unix, OS/2, VMS, etc.
-
Eficiente y rápido. Utiliza poca memoria y es capaz de abrir un archivo de gigabytes instantáneamente.
-
Carga archivos de tamaño ilimitado.
-
Optimizado para archivos grandes. Está probado contra archivos reales de con un tamaño de GBs.
-
Tareas asíncronas. Las tareas que afecta a todo el archivo nunca congelan la interfaz de usuario.
-
Se Navega con facilidad dentro del archivo. Ordenes tales como “ir a la parte superior o inferior del archivo”, etc.
-
Compatibilidad con Unicode y UTF-8. Cargar archivos con cualquier conjunto de caracteres: ANSI, windows-1252, UTF-8, UTF-16, etc. Se puede seleccionar cualquier conjunto de caracteres apoyado por Java JVM. Además, se puede realizar conversiones entre cualquier conjunto de caracteres.
-
Uso de búsquedas por medio de expresiones regulares. Buscar una cadena en el archivo, o encontrar un patrón escrito en una expresión regular.
-
Reemplazar avanzado. Se puede reemplazar cadenas de texto, ya sea por buscar un texto o por medio de una expresión regular.
-
Soporte de Bookmark. Se puede marcar posiciones en el archivo, para revisar más adelante. Además, se puede exportar una región del texto entre dos marcadores.
-
Multiple finales de línea compatibles. Jalatext puede cargar archivos escritos en sistemas Windows o Linux. Además, puede convertir los finales de línea entre DOS/Windows y Unix/Linux.
Una palabras del autor
Es útil para ficheros de log que se han desmadrado, y ocupan varios Gigas
¿Cuéntame un poquito quienes sois y de donde sois?
Pues en realidad la respuesta es en singular. La aplicación de Jalatext la he desarrollado sólo, en mis horas libres. Es decir, ahora mismo yo tengo un trabajo a parte, que es mi principal fuente de ingresos, y con la puesta en venta con el modelo de shareware no espero de momento ganarme la vida con ello ;) En mi trabajo actual tratamos con bases de datos MySQL las cuales almacenan mucha información. Tenemos desde bases de datos de 4GB hasta aproximadamente 100GB. ¡Ah! Y soy de Girona.
En este mundo de bases de datos relacionales y NoSQL. Cuando el precio por el giga de almacenamiento es muy inferior al euro ¿quién utiliza ficheros de texto de hasta 100Gb? ¿Cómo descubristeis esta necesidad?
Bien, ficheros de texto para almacenar y trabajar la información, espero que no mucha gente… Pero esta necesidad me la encontré directamente al tener que recuperar del backup de una MySQL un par de tablas pequeñas (aprox 10 MB), y el backup era de 80 GB. Al ser los backup de MySQL texto plano, pensé, ábrelo con un editor de texto, coges la parte que necesitas y voila. Y esto, que en aparente parecía muy sencillo, resultó imposible por el problema de tener un fichero de texto de muchos Gb. Buscando en la red, vi que no había muchas alternativas, encontré un programa similar, que es un visor, pero también tuvo problemas al abrir el fichero. Así que decidí ponerme manos a la obra. Pensé que debería existir una herramienta especializada en tratar ficheros grandes, en lugar de desarrollar un programa que solucionara la situación concreta.
Es útil para ficheros de log que se han desmadrado, y ocupan varios Gigas, backups de MySQL en formato texto, CSV, XMLs y otro tipos de archivos de intercambio de datos que pueden acabar siendo de gran tamaño.
¿Habéis realizado vuestras propias librerías de operaciones IO o son las estándar de Java?
De momento he trabajado con las librerías estándar de Java (tanto las IO, como las NIO), ya que así es fácil continuar siendo multiplataforma y ha dado un rendimiento suficiente. Aunque he tenido que pulir bastante el algoritmo de carga, ya que con Java es muy fácil implementar algoritmos ineficientes por el uso masivo de objetos. No obstante, estoy estudiando implementar la IO de forma nativa al S.O. o trabajar con una librería que lo haga, para mejorar el rendimiento, ya que justamente, el IO es el cuello de botella de las aplicaciones de este tipo.
¿Cómo habéis afrontado los problemas de rendimiento que produce trabajar con este volumen de datos?
Básicamente, de dos formas: intentar pulir al máximo los algoritmos de IO, y que todos los procesos de IO se hagan en un thread a parte de forma asíncrona, de manera que la GUI nunca se “congele” y que el usuario nunca tenga la percepción que el programa se ha colgado. Cuando se trabaja con volúmenes de datos tan grandes en aplicaciones de escritorio, es preferible que el programa tarde un poco más a que el programa se quede bloqueado y parezca que no haga nada.
¿Cuanto tiempo le habéis dedicado a la herramienta?
Aproximadamente, poco más de un año, aunque al hacerlo en los ratos libres, es un tiempo nada preciso. Sí miráramos jornadas de desarrollo, no sabría darte un valor aproximado, pero seguramente serían varios meses.
Si tuvieras que señalar tres cosas de JalaText de las que te sientas más orgulloso, ¿Cuáles serían?
Tres cosas? A ver… Yo diría:
-
Es una aplicación especializada que sólo pretende hacer aquello para lo cual fue diseñada y hacerlo de la mejor manera posible: tratar archivos de texto muy grandes.
-
La aplicación nunca se cuelga, o eso he intentado ;) Todos los procesos que pueden resultar largos, se lanzan en un thread a parte, y tienen una barra de progreso que se va actualizando, para dar feedback al usuario que la aplicación está trabajando.
-
Multiplataforma: Ya que es una aplicación muy orientada a la empresa (no creo que mucha gente trate con este tipo de ficheros en casa), ser multiplataforma es un plus.
Esta necesidad me la encontré directamente al tener que recuperar del backup de una MySQL
¿Y el futuro? Tenéis algún roadmap de por donde va a continuar la evolución del producto? ¿Otros productos en el horizonte?
Pues sí, tengo definido un poco el roadmap: Por un lado, la actual rama 1.5.x, en la que se pueden añadir mejoras para que Jalatext sea más útil. Por otro lado, la rama 2.0, con las principales novedades:
-
Potenciar la edición, con lo que yo llamo el “live editing”, poder editar cualquier parte del fichero en vivo, no como ahora, que la edición se restringe a cambiar de charset o reemplazar texto.
-
Soft scrolling: Poder hacer scroll de todo el fichero utilizando la barra de scroll, en lugar de cargar manualmente las diferentes partes del fichero como ahora. Esta opción se podrá desactivar, para realizar el scrolling manual como hasta ahora, ya que es más seguro para ficheros con líneas largas.
-
Algunas ideas y pequeñas características más, como un modo tail, muy útil para ficheros log vivos, etc.
Página Web | JalaText