Aplicación Java para dividir un archivo de texto muy grande en varios archivos más pequeños

jueves, 7 de agosto de 2014

En varias ocasiones he tenido que lidiar con archivos de texto extremadamente largos, con miles de líneas de texto, y en una de esas veces me tocó un archivo de Log con cientos de miles de líneas que mis editores de texto en Windows no podían abrir, y los que si lo lograban, no me permitían manipular el archivo sin antes quedarse congelados. Aunque encontré algunas herramientas en línea que podían abrir el archivo y permitirme leer, no me permitían manipularlo.

Mi solución, para mi caso particular, fue dividir el archivo en varios archivos más pequeños, ya que era un Log de transacciones de una aplicación y solo necesitaba depurar usando las entradas del log. Lo que hice fue escribir un pequeño programa en Java. Hace poco le agregué una interfaz gráfica para facilitar su uso.

Para utilizar esta herramienta deberás contar con lo siguiente:

  1. Tener instalado el JRE 6 de Java. el común de los equipos ya deben tenerlo instalado. Solo deberás tener por seguro que tienes la versión 6.
  2. Descargar la herramienta desde el repositorio en GitHub.
  3. Descomprimir el archivo ZIP en una ubicación que conozcas. Por ejemplo, en C:\Users\jesfre\Documents\text-splitter-pack. En tu caso sería tu nombre de usuario.
  4. Entrar a la carpeta y hacer doble-clic en el archivo run.bat. Deberá abrirse una ventana de comandos y ejecutarse automáticamente una pequeña interfaz gráfica similar a esta:
  1. En esta ventana deberás:
  • Seleccionar el archivo de texto muy grande que quieres dividir.
  • Seleccionar la carpeta donde quieres que se guarden los archivos más pequeños que se generarán como resultado de la división del archivo grande.
  • Asignar la cantidad máxima de líneas que deberá tener cada archivo dividido. Por ejemplo, si el archivo grande tiene 1200 líneas de texto, y quieres que se generen 10 archivos más pequeños, deberás asignar en Set the number of lines per file: la cantidad de 120.
  • Hacer clic en Save files para generar los nuevos archivos. En mi caso, el archivo se llama prueba_archivo grande.txt y contiene 389 líneas de texto.
  • Al terminar deberás poder ver los resultados de la siguiente forma:

Para ver tus archivos, navega hasta la carpeta que seleccionaste en Target folder... y verás los nuevos archivos que han sido generados recortando el archivo más grande.


Para terminar, simplemente cierra la ventana de la aplicación.

Esta herramienta funciona con cualquier archivo que contenga texto plano, como archivos de tipo .txt, .csv, entre otros.

Podrás ver que es una herramienta muy simple. Ahora te invito a compartirla y mejorarla, pues es de código abierto y está disponible en https://github.com/jesfre/file-splitter.





Mavenizar un proyecto Web existente usando project-mavenizer

martes, 29 de julio de 2014

Aunque personalmente no me gusta el anglicismo Mavenizar, es el tema que abordaré para esta guía.

Explicaré cómo mavenizar un proyecto Web que no cumple con la estructura de directorios estándar de Maven. Estos proyectos no estándares pueden ser aquellos que han sido construidos hace ya un tiempo atrás, legados, o aquellos generados usando las herramientas de un IDE como Eclipse y por lo cual no se ajustan a los requerimientos convencionales de Maven. En ocasiones he 
mavenizado algún proyecto ya existente que he tenido que modificar para aprovechar los beneficios de algunos plugins de Maven y así evitar reinventar la rueda en su código.
Además, esta guía tiene el objetivo de explicar el funcionamiento de una herramienta de código abierto para llevar a cabo la tarea de mavenización. La herramienta es project-mavenizer. Con esta herramienta podremos generar un archivo de configuración POM que pueda utilizar la estructura no estándar del proyecto existente, en vez de modificar la estructura del proyecto para que se ajuste a las convenciones de Maven.

La guía de project-mavenizer la podemos encontrar también en inglés, nivel Tarzán, en GitHub.

Descargar y descomprimir la herramienta

  1. Descarga la herramienta desde GitHub. Este es un archivo ZIP llamado project-mavenizer-pack.zip que contiene:
    • La herramienta de mavenización project-mavenizer-0.0.1.jar.
    • Un proyecto Web de ejemplo llamado NonStandardWebProject que no cumple con el estándar de directorios de Maven.
    • El archivo sample.properties que deberás editar, y opcionalmente renombrar, para poder usar con tu proyecto.
  2. Descomprime el archivo project-mavenizer-pack.zip en una ubicación bien identificada; por ejemplo en C:\mavenizator\project-mavenizer-pack\.

Agregar tus configuraciones

  1. Deberás editar el archivo C:\mavenizator\project-mavenizer-pack\sample.properties y seguir las instrucciones que vienen en el mismo. En resumen es asignar los siguientes valores:
    • Asignar un nombre al proyecto, digamos miproyectomaven. Este será también el nombre del archivo WAR generado.
    • Asignar la ubicación de la carpeta de tu proyecto. Para el caso de nuestro ejemplo de prueba es C:\mavenizator\project-mavenizer-pack\NonStandardWebProject.
    • Asignar la ruta a la carpeta con el contenido Web del proyecto. Para nuestro ejemplo, C:\mavenizator\project-mavenizer-pack\NonStandardWebProject\WebContent.
    • Asignar la ruta a las carpetas con código fuente y recursos para el classpath del proyecto. En el archivo sample.properties vienen unos ejemplo.
    • Asignar la ruta a la carpeta que contiene todas las librerías usadas en tu proyecto. Ve el ejemplo en el archivo.

Mavenizar el proyecto Web

  1. Abre una ventana de comandos y navega hacia la carpeta que descomprimiste. En los siguientes ejemplos estaré usando MS-DOS.
  2. Desde tu ubicación en línea de comandos, ejecuta lo siguiente: c:\mavenizator\project-mavenizer-pack> java -jar project-mavenizer-0.0.1.jar.
Deberás ver algo similar a esto:
C:\mavenizator\project-mavenizer-pack> java -jar project-mavenizer-0.0.1.jar 
Set the properties file name:sample.properties 
Loading /C:/mavenizator/project-mavenizer-pack/sample.properties 
Generated file is: C:/mavenizator/project-mavenizer-pack/NonStandardWebProject\pom.xml 
C:\mavenizator\project-mavenizer-pack>


Probarlo

  1. Ahora puedes usar tu proyecto como un proyecto Web Maven. El pom.xml generado en el proyecto tiene las configuraciones necesarias para correr la aplicación usando un Tomcat embebido. Para correrlo, desde la ventana de comandos navega a la carpeta del proyecto Web y ejecuta c:\mavenizator\project-mavenizer-pack\NonStandardWebProject > mvn clean tomcat7:run.
  1. Si puedes ver algo similar a Starting ProtocolHandler ["http-bio-9966"] y sin errores previos entonces abre el enlace http://localhost:9966/miproyectomaven/ desde un navegador de Internet.

Después de ejecutar el comando se deberá haber generado un nuevo archivo pom.xml en la carpeta raíz del proyecto. Sería c:\mavenizator\project-mavenizer-pack\NonStandardWebProject\pom.xml.


Prueba la herramienta, espero que te sirva y, si quieres, puedes mejorarlo pues es de código abierto. El código está disponible en https://github.com/jesfre/project-mavenizer.



Cómo convertirse en un desarrollador de aplicaciones Web modernas

miércoles, 4 de junio de 2014

En este artículo busco resumir mi experiencia en cuanto a los pasos o la trayectoria que normalmente se seguiría para llegar a dominar el desarrollo de aplicaciones Web.
Aunque yo aprendí de forma distinta, ya que me tuve que meter de lleno al desarrollo e ir aprendiendo al paso, lo más normal y muy efectivo es siempre iniciar de cero. Pero, para aquellas personas que ya tienen bases o experiencia, puede que haya sido distinto. Lo siguiente, sin embargo, lo comprendí después de haber estado enseñando a mi futura esposa cómo desarrollar aplicaciones Web y viendo la forma en que ella aprendía.

Primero: Identifica qué es lo que sabes y comienza por lo básico, lo que aun no conoces.
Haz un análisis de los conocimientos que tienes actualmente. Normalmente, si estas estudiando una carrera, estarás aprendiendo algún lenguaje de programación, y cualquiera que este sea te será muy útil. Entre las cosas básicas que deberás aprender están:

HTML: Luego de aprenderlo, también deberás comprender lo que es XHTML.
El protocolo HTTP: Deberás entender qué son las peticiones, tipos y cómo se procesan.
CSS: Qué es, cómo se agrega al HTML y cómo se usa.
Javascript: Ees una de las herramientas más importantes para tí como desarrollador de aplicaciones Web modernas; debes aprender qué es, cómo se agrega al HTML y cómo funciona. Aquí deberás hacer uso de tus conocimientos de programación; si no tienes ningún conocimiento de programación, no te preocupes ya que encontrarás muchos tutoriales que también te ensañan las nociones de la programación a través de Javascript.

De todas estas puedes encontrar infinidad de manuales y tutoriales en todo Internet.

Segundo: Determinar hasta dónde quieres llegar.
Ten en cuenta que para desarrollar aplicaciones Web deberás aprender distintas tecnologías, algunas ya las he mencionado, y dependiendo de la complejidad con la que has de desarrollar las aplicaciones y el tipo de aplicaciones Web.
De acuerdo a la complejidad necesitarás aprender lo siguiente:

XML (ya habrás entendido un poco al leer acerca de XHTML)
Un lenguaje para el servidor (aquí comienza el dinamismo de las aplicaciones Web) como Java, PHP, lenguajes de .Net, etc. Esto ya dependerá de varios factores como el proyecto y tus gustos. Ten en cuenta que al decidirte por una tecnología para el servidor, habrás de aprender además otras tecnologías necesarias para el desarrollo de tus aplicaciones.

Tercero: Paciencia y entusiasmo.
Puedo decir que este es el flujo de aprendizaje común para comenzar a desarrollar aplicaciones Web. Puedes comenzar haciendo pequeñas páginas usando HTML y CSS, luego agregarle alguna intereactividad con Javascript, y posteriormente agregarle complejidad.
Pero como siempre, para llegar al lugar que quieres, deberás tener paciencia y estar dispuesto a leer y hacer "pininos" conforme aprendas nuevas cosas. Ten en cuenta que no te servirá mucho si devoras un libro Javascript sin hacer ejemplos, ya que esto se trata de leer, entender y poner en práctica. Tal vez este último punto lo puedo resumir en, pasión.

Espero te sirva.