May 17, 2010

Último jalón!

La última parte del proyecto implicaba compilar agregar al jar y escribir y leer sobre un archivo de configuración. Lo cual lo explicaremos a continuación:

Archivo de configuración:
Necesitábamos un archivo de configuración para poder guardar el puerto el host y la ubicación del archivo. Para poder hacer esto usamos un archivo xml para guardar la configuración. Por parte de clojure utilizamos xml.zip esta lib solamente nos brindaba la opción de leer.... eso fue un pequeño problema ya que en la documentación decía que leía y escribía.. El problema lo pudimos solucionar de buena forma :) escribiendo de forma normal en el archivo. Cabe resaltar que existen otras opciones y jar's que tienen utilerias para poder leer y escribir sobre xml, pero estas no son parte del core de clojure ni el contrib.

Compilación:
La compilación del proyecto se dio de forma sencilla solo agregamos (:gen-class) a cada uno de nuestros archivos a compilar y listo. Tuvimos que agregar al path de java la carpeta classes para poder compilar. Creamos un archivo de compilación para poder hacerlo simplemente con un (load-file "compile.clj").

JAR:
Solo bastó crear un manifest en el cual se agrega al jar para que sepas dónde está el main.
El problema que tuvimos durante la creación del jar fue el poder accesar a las imágenes.
El programa no las podía hallar las imágenes dentro del jar debido a que habíamos puesto las rutas de cierta forma. Este problema se solucionó agregando esto a la hora de cargar las imágenes ClassLoader/getSystemResource "ubicaciondelaimagen"

Terminando esto conluimos el proyecto de una buena forma. A tiempo y con una versión estable que debido a que google code está en mantenimiento no pudimos subir. En la web tenemos otra versión la que funciona sin imágenes.
Este proyecto fue muy interesante, aprendimos cosas nuevas, a trabajar nuevamente en equipo, distribuir tareas y ayudarnos en los problemas que tenía cada quien en sus tareas.
Fue un buen proyecto!!!!!

May 8, 2010

GUI casi lista!

El día de hoy me dediqué a cambiar los layouts de toda la interfaz. El motivo de ese cambio fue que fuera más sencillo apegarse a las guías de diseño en swing. Se pasó de un BorderLayout/GridLayout a utilizar GroupLayout.

La diferencia principal es que el GroupLayout permite posicionar los componentes de manera horizontal y  vertical, al contrario del GridLayout que se van poniendo los elementos uno tras otro sin poder dejar espacios (a no ser que chacalmente se le inserte un panel vacio #¬¬).

Cabe mencionar que se intentó ocupar el GridBagLayout pero es complejo y no me convenció mucho, ya que hay mucho que configurar y es una lata estar posicionando los elementos.

Me apoye mucho (MUCHO) de los siguientes sitios

Swing Java example to Clojure
How to Use GroupLayout
GroupLayout (Java Platform SE 6)

También se colocaron íconos en el menú para que fuera un poco menos serio; sin embargo, hay una bronca con la transparencia de las imágenes =/  Se arreglará a la brevedad...

Por último, lo único que resta de las guías de diseño es la alineación de los botones hacia la derecha.

Basta, me voy a dormir ... n_n

Saludos!
Israel

May 6, 2010

Recta final!

Algunos detalles con la conexión en la base de datos fueron corregidos, pero aún falta guardar en un archivo la configuración.

El jar ya funciona con la última versión generada.

La documentación fue al fin generada en un sólo archivo, bueno en dos, uno para server y otro para client.

También, comenzamos a generar ideas para el storyboard que se verá en nuestro video final.

May 2, 2010

Actualización después de dias ...

Hoy dediqué todo lo que va del día a avanzar el proyecto. Me di cuenta que lo más dificil no es aprender clojure, ni el trabajo en equipo; ni siquiera el unir clases de java con scripts de clojure ... lo mas dificil serán las guías de look and feel de Swing .... U__U

Como sea, el día de hoy terminé mi parte de unir la interfaz gráfica con la funcionalidad de los módulos de búsqueda, configuración y altas/bajas/cambios de registros. Cada 'formulario' lo realice en un jframe por separado, y este a su vez, en un archivo clj separado. Lo menciono sólo por si acaso ;)

Entonces sólo falta realizar los filtros necesarios para detectar el modo en que se corre la aplicación, así como las guías de diseño de Swing (PUAG!!!)

Saludos,
Israel

Apr 27, 2010

Video para el final

Para el 17 de mayo, entregaremos un video que tendrá las siguientes características:
  • 5 minutos máximo.
  • Presentar las generalidades del proyecto: alcance, diseño, impementación, forma de uso, etc.
  • Maostrar evidencia de metodología usada durante el desarrollo.
  • Subir a youtube.com y enviar la liga correspondiente.
  • Se evaluará calidad de imagen y sonido, edición, ingenio y creatividad.

Apr 26, 2010

Avance 4/26/10

Al fin la aplicación ya está disponible tanto en su versión local como en su versión de cliente-servidor aunque aún no esta creada la opción para elegir cuál de las dos se quiere usar, pero ambas están listas y funcionan!

Por otro lado, se sigue desarrollando el lado de configuración del puerto, host y dirección de la base de datos, así como tratar de implementar lo más que se puda las recomendaciones de interfaces de java.

También estamos intentando hacer pruebas para empaquetar nuestro proyecto en un archivo jar.

Apr 19, 2010

Avance 4/19/10

El día de hoy la aplicación del servidor comenzó a desarrollarse.
Se implementó el método read que se especifica en la interface, aunque tuvo que cambiarse de nombre a read-record porque read ya existe dentro del core de clojure.

Un pequeño detalle se corrigió del servidor local, aunque no causaba errores anteriormente.

La aplicación cliente-servidor se implemetará totalmente haciendo algunos cambios a como se hacía anteriormente para poder acoplarnos a la interface que se nos pide. Después, se acoplará la versión local para que también pueda funcionar bajo las mismas especificaciones.

Apr 13, 2010

Avance 4/13/10

El día de hoy logramos mandar de un servidor a un cliente un mapa de clojure serializándolo en el servidor y deserializándolo en el cliente, usando algunas funciones de clojure, ahora solo falta que el mapa que se envíe, sea el mapa de la base de datos.

Por otro lado, la interfaz para las configuraciones de conexión comenzó a desarrollarse.

Apr 12, 2010

Avances

Hoy se vio bien el punto de cliente-servidor. El cliente tiene dos formas de correr la aplicación modo servidor, modo cliente. En el primer modo la aplicación trata de conectarse a la ip que le da el usuario y en el segundo modo se carga una base de datos local que esta ubicada en la ruta que el usuario le indica. Se realizó un prototipo de servidor utilizando sockets.
Se creó un ticket para que la búsqueda no sea más case sensitive, esto último ya fue arreglado.

Apr 5, 2010

Regresando de vacaciones ... muchas cosas por hacer.

Regresamos de vacaciones y si que nos costó regresar a la vida real x_X. Nos juntamos para ver que es lo que se tiene que hacer ahora para el proyecto y esto fue lo que salió:


  • Arreglar la búsqueda (Fumar/ No fumar), ya que por omisión siempre filtra los de no fumar.
  • Ver que tranza con el framework que pide para futuras modificaciones a la interfaz gráfica. (Your user interface should be designed with the expectation of future functionality enhancements, and it should establish a framework that will support this with minimal disruption to the users when this occurs.)
  • Modificar el paquete db_management y sus archivos book.clj y management.clj para acoplarlo a la especificación (suncertify.db y Data.java). Agregar todos los métodos y excepciones especificados en Data.java.
  • El sistema debe permitir al usuario poder especificar la ubicación de la base de datos (remota o local). Si la base de datos es local, las funciones de red deben ser ignoradas.
  • Asegurarse de que la concurrencia se esté dando de forma correcta.
  • Empacar el proyecto en jar y ser poder especificar los modos de ejecución del programa (server, alone, ninguna). El archivo jar debe ser llamado runme.jar
  • Leer la sección Packaging of Submissions de la especificación. Son un montón nde detallitos sencillos para la entrega.
  • Archivo de configuración :(
A darle pues...

Mar 15, 2010

The GUI strikes back!

Al fin pudimos subir una versión decente de la interfaz al repositorio. El principal problema fue que el desarrollo de interfaces utilizando clases de Java es completamente horrible (sin ayuda de algún Swing Builder claro =P). La interfaz es simple, pero cumple su función.

El segundo problema fue la traducción a lenguaje Clojure, ya que primero se diseñó la interfaz en Java. Durante la 'migración' entre lenguajes nos pudimos dar cuenta de que el lenguaje Clojure es mucho más limpio que en Java, no solo en extensión del código sino en legibilidad y en redundancia de código. Es oficial, Clojure es hermoso. Swing con Clojure es horrible. =P


Mar 12, 2010

Quinta reunión en equipo

En esta sesión se siguió trabajando en el diseño de la interfaz gráfica, pero como aún no hay nada funcional, no se subió al repositorio de control de versiones.
También se continuó con los métodos para buscar los registros. De igual forma, no hay todavía nada funcional para subir al repositorio.
La interacción con la base de datos se movió a un paquete para hacerse cargo de ello, y que los demás paquetes solo lo llamen a él.

Debido a que el lunes no hay actividades, nuestra siguiente reunión será en una semana, pero trabajaremos en nuestras casas para seguir avanzando.

Cuarta Reunión en equipo

En la cuarta reunión de proyecto, tuvimos una pequeña charla sobre como podríamos hacer que la edición sobre un mismo campo (apartado de un cuarto) se realizara de manera sincronizada. Se planteó el uso de un token sobre el registro para que la persona que lo tuviera pudiera hacer su apartado y que nadie más pudiera hacer algo sobre el mientras tuviera el token. Ahondamos un poco en la forma en la que se iban a pasar los datos desde la interfaz para hacer la búsqueda y el apartado de un cuarto.
Todos los integrantes asistieron de manera puntual a la junta.

Mar 4, 2010

Terecera reunión de equipo

En esta reunión nos centraos en aanalizar cada uno de los requerimientos del proyecto. Decidimos poner las excepciones que creemos en el paquete que le corresponde.

i.e. noPuedoLeerException iría en el paquete io.

Definimos los criterios para implementar la búsqueda y la atualización de estados en los registros.

Mar 3, 2010

Justificación de elección de licencia

Eligimos la licencia LGPL porque nos brinda una mayor flexibilidad tanto a nosotros como a los posibles usuarios de este código. Creemos que es muy importante que aparte de aprender con nuestro código, es que los usuarios puedan utilizarlo como guía y no tener que mostrar el código que ellos hicieron, esto le permitiría a cualquier persona que tenga una necesidad que nuestro sistema pueda satisfacer, este no tenga que compartir su lógica de negocios y que pueda permancer privado.


Mar 1, 2010

Segunda reunión del equipo

Revisamos lo que la interfaz gráfica debía de llevar junto a las funcionalidades principales del sistema.

Además se comenzó a trabajar en el archivo writer.clj que escribe la base de datos en el sistema, hasta ahora solo escribe los números mágicos del principio y las cabeceras de los campos.

Feb 25, 2010

Primera reunión del equipo

Hoy fue la primera reunión 'formal' para comenzar a trabajar en el proyecto urlybird. Félix, Favio y yo nos quedamos de ver en el CCI para definir cómo vamos a trabajar durante estas semanas. Por cierto, Favio no llegó (vive cruzando la calle del tec) -_- ... pero estuvo presente a través del chat n_n.

Acordamos seguir la práctica de time-boxing, dividiendo nuestras actividades a través de sprints o iteraciones de una semana de duración. ¿Porqué una semana? Bueno, debido a que consideramos que ponernos pequeñas actividades por semana aumenta el avance general, es decir, tendremos un avance incremental. La duración de una semana por cada iteración lo dejaremos en un estado de 'veremos', ya que tenemos que ver si es nuestro ritmo de trabajo o lo modificamos.

También definimos que tendremos reuniones los días Lunes y Jueves de 8 am a 9 am, en donde platicaremos del avance de nuestro proyecto, los problemas encontrados y nuestras próximas actividades. Trataremos de variar el lugar de las reuniones, a veces en el edificio EGAP-EGADE (a.k.a. CCI), otras veces en la biblioteca y otras veces en la cafetería o en las tortas (¡los programadores tenemos que desayunar también!). Las reuniones serán objetivas y un tanto informales.

La forma de llevar un registro de nuestras actividades será a través de un documento de google docs, donde se dividen las actividades generales, por iteración y responsables. Si les interesa echarle un ojo a nuestro documento, mándenme un email y con gusto les doy acceso.


¡Comenzamos con todo! :)

"Change that does not result in success is mere movement." Venkat Subramaniam (@venkat_s)

Feb 22, 2010

REPL-Clojure desde cualquier directorio

Si estás cansado de cambiar entre directorios cada vez que quieres ejecutar el REPL de Clojure, quizá esto te interese.

Existe una forma sencilla para poder acceder al REPL desde cualquier ubicación, para hacer esto necesitas una copia del archivo clojure.jar. Lo puedes descargar junto con todo el paquete de clojure desde aquí.

Posteriormente, debes ubicar muy bien el directorio donde se encuentran los archivos de tu instalación de Java. En mi caso, estoy utilizando Ubuntu Linux. Mi directorio raiz de Java es el siguiente:

/usr/lib/jvm/java-6-sun-1.6.0.15/

Si eres usuario de Windows, la instalación por default se hace en tu carpeta 

C:/Archivos de Programa/java/jre

Dentro de la carpeta principal de Java, debes ingresar a la carpeta lib/  y posteriormente a la subcarpeta ext/. En mi caso la ruta es de la siguiente forma:

/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/ext/


El siguiente paso es copiar el archivo clojure.jar a la carpeta ext/ y listo!

Puedes correr el REPL de Clojure escribiendo el siguiente comando en una terminal y desde cualquier directorio:

$java clojure.main


Lo que acabas de hacer es añadir archivos al classpath de Java. La ruta .../jre/lib/ext/  contiene todos los archivos .jar que Java busca cada vez que se compila o ejecuta una aplicación. Así, Java podrá localizar el archivo clojure.jar.

Adicionalmente puedes incluir los archivos clojure-contrib.jarjline-0.9.94.jar para añadir más bibliotecas y funcionalidad al REPL.


Happy coding!