Desarrollo de Sistemas ERP/CRM y Software Libre, Linux, Desarrollo de Proyectos, Programación OpenSource. Web

martes, diciembre 20, 2005

SIG Proyectos y Logistica, avances

El SIG Proyectos y Logistica avanzan por buen rumbo, asi es que la fase de gestion comercial y de importacion esta culminada hasta un 90%, terminandose hoy el perfeccionamiento del sistema de generacion de ofertas y de generacion de Ordenes de Compra que ya estaba funcional aunque con algunos problemas ya resueltos.

Esta noche espero poder terminar el Sugerido de Piezas, vital para la rapida referencia de grandes listados de piezas. Junto a esto la adicion del codigo de producto, pedido por la mi empresa y que puede resultar importante en algunos casos.

En cuanto al SIG Kernel, este esta estable desde hace algunos dias y el SIG Server aun necesita un retoque en cuanto a rendimiento y al recolector de usuarios inactivos.

Todos los modulos de Logistica solo esperan a que se completen las tareas pendientes para la integracion de ambas partes (Proyectos y Logistica) completados y aun faltan por revision intensiva.

Esperamos en los primeros dias de Enero hacer el lanzamiento del Sistema funcional y la base SIG para desarrollo de sistemas.


Primera Propuesta a LINUX-PROG

Con el objetivo de proporcionar un primer acercamiento a diseñar un sub-sistema de gestion de datos subyacente a las aplicaciones de gestion en mira, les he propuesto este conjunto de funcionalidades basicas, para el desarrollo de una base programatica multiplataforma. Basada en XML, en una primera fase seria interesante proveer una libreria de funcionalidades para las principales plataformas de desarrollo, a mi entender Java, .NET, C++.

Haciendo un poco de abstraccion sobre los datos podemos llegar a que estos:
1.Son definidos (la estructura sintactica y semantica de los datos)
2.Producidos (se compone una informacion reflejando las particularidades del hecho)
3.Validados (la sintaxis de escritura de los datos pueden ser validada e inclusive la semantica)
4.Procesados (los datos son procesados, transformados, en procesos donde se puede mediante operaciones especificas, obtener nuevos datos, recombinar los existentes, resumir conjuntos de datos, etc.)
5.Almacenados (la posibilidad de registrar en el tiempo los datos y de recuperarlos cuando sea necesario, ya sea de forma exacta a como son representados o mediante una transformacion que permita su rapida consulta en estructuras mas eficientes.)
6.Trasmitidos (la transmision de informacion es inherente a los procesos, nada mas logico que existan metodos para transmitir los datos)
7.y Consumidos finalmente. (El usuario final consume los datos al disponer de informes sobre los cuales realiza valoraciones, emision de criterios y tomar desiciones)
Estos procesos no siguen un curso unico por lo que la interrelacion entre ellos forman en si otros tipos de procesos, en condiciones de ser definidos, registrados, auditados.
La tecnologia que mas se ajusta a esta definicion de datos es hoy XML, que posee herramientas para todas las definiciones de procesos anteriores.

1.XML Schema para definiciones
2.Facil producir (texto plano, con reglas sintacticas que garantizan la correccion de los datos)
3.Validacion a traves de parsers mediante los documentos de definicion.
4.Tecnologias para el procesamiento, DOM, SAX, XSLT, etc.
5.Bases de datos XML o relacionales.
6.XML al ser texto plano puede ser enviado por correo, trasmitirlo a traves de proxys, como WebService, y con la seguridad de que no contendra (hasta ahora) codigo malicioso adjunto.
7.Aunque XML no es facilmente leible por humanos (o sea, no le das un reporte de contabilidad a un director de empresa en XML para que lo lea directamente) si forma parte de todas las tecnologias de reportes innovadoras (JasperReports, phpreports, Report Rendering Engine, RTK::Report Toolkit, etc.)
Ahora lo mas elemental en estas 7 direcciones seria definir nuevos estandares nacionales (o reusar los existentes) para la Definicion de datos, Produccion, Validacion, Procesamiento, Almacenamiento, Transmision y Consumo. Para lo cual, algunos estadares ya definidos se adaptan perfectamente, como el XML Schema para definicion y Validacion, y la parte de Transmision de datos de ebXML (quizas no sea el mejor).

La idea general es que como cada institucion/organismo tienen sus particularidades es mas conveniente que ellas definan sus propios datos/procesos y los metodos de trabajo con ellos, de manera que internamente cuenten con herramientas comunes a otras instituciones/organismos pero adaptadas por definiciones a sus necesidades y con la posibilidad de integracion y agrupacion que brindan las tecnologias XML.
El siguiente grafico ilustra la idea claramente (o quizas no tan claramente).

Aqui se puede observar que para una Entidad, esta tiene definidos los tipos de documentos internos para con ellos realizar sus operaciones, donde ademas para su marco (o marcos) institucional tambien tiene un conjunto de definiciones que agrupan las necesidades de la institucion/organizacion que la agrupa para proveer integracion con otras Entidades en su mismo nivel y de caracter organizativo.

Asi mismo una Institucion/Organizacion se agrupa mediante otras definiciones en un marco de nivel superior para integrarse con otras Instituciones/Organizaciones y con ello intereactuar en comunidad con estas.

Este es un grafico hipotetico de organizacion en la sociedad de la informacion, jerarquico, organizado, integrado, pero al fin y al cabo hipotetico, donde solo se ilustra la capacidad del modelo de definicion-produccion-validacion-procesamiento-almacenamiento-transmision-consumo de los datos, de manera que sea coherente con el desarrollo necesario a todos los niveles interesados.

Conclusiones.

Las posibilidades que proveen las tecnologias XML para integracion de sistemas constituyen la mejor opcion y un metodo viable de desarrollo de sistemas y aplicaciones verticales acoplables entre si a todos los niveles segun definicion, sin restarle importancia a los desarrollos horizontales de aplicaciones que resuelven problemas puntuales, donde es en definitiva que se intensifican los esfuerzos.

Quizas el enfoque no sea coherente con otras metodologias ya estudiadas/aceptadas nacionalmente pero a nivel mundial los esfuerzos de integracion vienen caminando en esta direccion, ya sean el estandar ebXML, aprobado y patrocinado por la ONU (creo que el unico, corrijanme), XML/EDI (Electronic Data Interchange), XBRL (eXtensible Bussiness Reporting Language), etc.

El objetivo de este documento es el desarrollo de aplicaciones de gestion que soporten funcionalidades de este tipo y con ello contribuir a incentivar la conciencia y la cultura informatica de la sociedad de la informacion cubana.

domingo, diciembre 18, 2005

Proyectos de desarrollo de software libre

Como muchos saben, la migración hacia los sistemas libres en Cuba tiene un gran obstáculo a vencer y es la cantidad de software desarrollado para plataformas propietarias (lease Windows) que actualmente es utilizado por las empresas cubanas, desde Nominas, Inventarios, Medios Basicos, Facturación, etc. hasta completos sistemas de gestion que funcionan bajo Windows, sin que los desarrolladores de los mismos le brinden soporte (o sea, software desarrollado en un momento determinado para resolver una situación especifica y cuyas fuentes quizas ni existan ya).

Viendo el esfuerzo que estan realizando los compañeros del grupo de desarrollo de Cygnus, quisiera proponerles una idea, que puede no ser buena, pero que en definitiva podria ser una solucion al problema de la migración en Cuba hacia Software Libre.

La idea es:
1- Identificar un conjunto de software con caracteristicas exclusivamente nacionales y que necesiten ser desarrollados desde cero o hacer un fork de versiones libres de otros.
2- Creacion por afiliación propia y voluntaria de grupos de desarrollo que den solucion a uno o varios problemas identificados, mediante el desarrollo del software necesario. Sin que por ello exista unicamente un grupo para cada problema en particular. Con estructura propia y autonomia.
3- Buscar el apoyo de instituciones estatales y/o gubernamentales para que den respaldo legal, de infraestructura y del know how de las aplicaciones.
4- Promover la incorporación de personas a estos grupos que puedan ayudar en el desarrollo del software (no solo programadores, sino tambien economistas, contadores, metodologos, diseñadores graficos, lingüistas, etc.)
5- Realizar encuentros donde sobre la base de la competitividad se motive la inventiva y el compromiso con la calidad de las soluciones implementadas.

De momento y dado que pertenezco a una empresa bastante grande y con necesidad de varios sistemas identifico los siguientes:

- Contabilidad y Finanzas
- Medios basicos
- Inventarios
- Facturación
- Personal y Nominas.
- Gestion Comercial (donde puede hacerse una sublista de casos particulares)

Es importante remarcar que no creo que las empresas de software cubanas tengan previsto cambiar su modelo de negocios, básicamente hago el software, lo vendo y doy soporte sin dar nunca las fuentes e inclusive haciendo la instalacion ellas mismas. Aunque usen Debian como plataforma y desarrollen aplicaciones en make y gcc.

Espero por sus opiniones.

sábado, diciembre 17, 2005

Linux de vuelta

Quizas Linux no tenga hoy las mejores herramientas de desarrollo deseables, o quizas la falta de costumbre o el exceso de comodidad me hagan sentirme seguro detras de un Visual Studio .NET 2003 que pocos IDEs comerciales , libre o de otra indole puedan llegar a imitar en rendimiento, funcionalidades, etc. Aun asi opciones libres en linux comienzan a crear inquietud en mi panorama profesional, Anjuta+Glade+GTK+, buena opcion para aquellos que se les da el C++ (no a mi, no programo en C++ desde Zortech C++), o quizas Kdevelop (aunque no me gusta nada que empiece con K), Eclipse para Java cuando mejoren su rendimiento (lo cual dudo, ya que seguramente estara programado en Java) y algunos otros IDEs para Java los cuales no creo que hagan fila, y finalmente mi favorito (sera por que soy un vago?) MonoDevelop, hasta ahora todo lo que he visto me es favorable, rapida descarga de Internet, instalacion grafica, integracion con el ambiente, opciones para desarrollo de GNOME, GTK+, Nemerle, Java, etc. etc. y con una opcion para importar projectos desde Visual Studio .NET todo un monumento a la portabilidad y la migracion.

Quizas el rendimiento se heche en falta (comparable a Eclipse) y esta maquina no creo que aguante un empujon. Por lo demas las ideas de desarrollo del UDMS creo que iran sobre Linux.


martes, diciembre 13, 2005

Increible desempeño en SIG Server

Con el proposito de mejorar la disponibilidad en las pruebas del SIG se ha instalado el Servidor en un equipo Hp Proliant ML310 con CPU Pentium IV a 3.2Ghz y 512Mb de RAM, y francamente los resultados nos han complacido, de 0.40 ms a 20 ms como promedio en el desempeño por consulta (realmente rapido)

lunes, diciembre 12, 2005

Completa Lista de mejoras de rendimiento y features al Kernel y Server del SIG

Despues de varios dias sin dormir (literalmente) el Kernel, Server y Client del SIG presentan nuevos features y mejoras de rendimiento que lo colocan a un buen nivel para servir aplicaciones con alta disponibilidad, robustez, accesibilidad y eficiencia.

Tenemos:
  • Implementacion de ObjectRepository para realizar cache de objetos de datos que requieran consultas a la base de datos.
  • Bitacora de actividad por usuario, personalizable para aplicaciones.
  • Serializacion manual completa, (supone un 50% de velocidad en consultas) incluyendo los eventos SignIn, SignOut, CheckIP, DllQuery.
  • Recolector de usuarios inactivos, configurable por el servidor.
  • Cambio de DLLs en caliente (sin necesidad de desconectar a los usuarios para reiniciar el servidor)
  • Cache de DLLs funcional (actualiza las versiones de las DLLs locales)
  • Barra de herramientas de Accesos directos con orientacion personalizable por el cliente.
Solo quedan por introducir la conversion del Server a Servicio del Sistema y el soporte para Internacionalizacion (I11N).


viernes, diciembre 09, 2005

SIG Server High-End Performance

SIG Server a sido mejorado considerablemente, llegando a alcanzar rendimientos muy buenos para el trabajo en red cercanos al rendimiento local del sistema (Server y Client en el mismo PC), han sido mejoradas la comunicacion con el SIG Server, las caches de DLLs, la serializacion de datos, etc.

Aun quedan varios aspectos a resolver en el area de rendimiento:
  • Convertir el SIG Server en servicio
  • Bitacora de actividad por usuario.
  • Soporte para Internacionalizacion (I11N)
Por la parte del SIG Proyectos y Logistica, este cuenta hoy con un Modulo de Proyectos de Negocio con un nivel de funcionalidades y soluciones bastante grande, quedando a punto para salir como version 1.0 en cualquier momento.

El resto de los modulos se iran mejorando paulatinamente, ademas de que ya todos seran actualizados a las nuevas interfaces de datos mas rapidas y eficientes.

lunes, diciembre 05, 2005

Medidores de desempeño del Servidor SIG

Con el objetivo de comprobar el desempeño del Servidor SIG, le he agregado soporte para Timings, de manera que es posible llevar un control del tiempo que se demora el servidor en dar respuesta para determinados tipos de consultas, la cantidad, etc. y por medio de una opcion en el menu de la consola es posible acceder a esta informacion que se actualiza cada 5 segundos.

He comprobado que las Consultas XML, pueden resultar en ocaciones mas rapidas, pero en sentido general las consultas Binarias se toman menos tiempo. Tambien que varias consultas son toman demasiado tiempo (casi un segundo) y que en general el tiempo de respuesta es muy pequeño, de entre los 5 y 20 milisegundos por consulta, lo que convierte a la optimizacion de consultas en un tema importante pues algunos modulos realizan casi 5*N consultas por cada N registros listados (5 puede llegar a ser un factor grande cuando N se incrementa, Ej. para 23 registros, serian 115 consultas, que en total sumarian a una velocidad promedio de 20 milisegundos, 2300 milisegundos o 2.3 segundos).

Otro aspecto importante es que hemos podido realizar un timing benchmark sobre los dos metodos de serializacion utilizados (BinaryFormater y Manual) y compararlos.

Los resultados arrojaron que la serializacion manual es un 50% mas rapida por lo tanto seria la opcion definitiva en el traspaso de informacion en el SIG, donde aun quedan mensajes de comunicaciones (SignIn, SignOut, CheckIP) que se realizan con el serializado a traves de BinaryFormater, por la complejidad que reviste (sobre todo en el tema de SignIn) la serializacion manual de una estructura de datos bastante compleja.

Asi todo. El SIG es hoy mas rapido, mas seguro y mas accesible.

Proximos features:
  • Recolector de usuarios desconectados o inactivos. (parcialmente implementado)
  • Serializacion Manual completa (SignIn, SignOut, CheckIP)
  • Cambio de DLLs en caliente (sin reinicio del Servidor)
y otras...

sábado, diciembre 03, 2005

ISocketObject, la interfaz fantasma y Documentacion de comunicaciones SIG

Decidido a migrar mis metodos de comunicacion, llevandolos a mejorar el rendimiento me encuentro que en un ejemplo de un articulo del sitio MSDN, hacen uso de la interfaz ISocketObject que especifica un metodo para serializacion manual de datos, pero no se decia si esta era una interfaz de algun namespace ya creado como System.Net, pues no lo es, ni de ningun otro namespace, por lo que aquel que quiera imitar el metodo de serializacion manual debera crear la citada interfaz ISocketObject, quedando:

public interface ISocketObject {
void Send (BinaryWriter bw);
}

No es dificil entonces tambien incorporarle a la clase en particular que implementa esta interfaz un constructor que reciba un BinaryReader para construir un objeto a partir de la serializacion manual recibida por el Stream del Socket, quedando algo como lo que sigue:

public class MiObjeto : ISocketObject {

public MiObjecto (BinaryReader br) {
...
}

public void Send (BinaryWriter bw) {
...
}

}

Mucho mas facil, la migracion cuando se tienen dos clases Request y Response que hacen las veces de mensajes entre el Servidor y el Cliente.

La migracion y documentacion del protocolo de mensajeria es:
  • DataQuery, INPUT (string sql, int rpp, int page) OUTPUT (string xml)
  • DataObjectQuery, INPUT (string sql, int rpp, int page) OUTPUT (int page, int from, int total, int results, object[] data)
  • UpdateQuery, INPUT (string sql) OUTPUT (int rows)
  • BinaryUpdateQuery INPUT (string sql, int binParams, int param1Len, byte[] param1,...,int paramNLen, byte[] paramN) OUTPUT (int rows)
  • BinaryDataQuery, INPUT (string sql) OUTPUT (int len, byte[] data)

Con estos metodos se pueden construir cualquier conjunto de operaciones para gestionar datos de cualquier tipo en la base de datos, aunque podrian no ser definitivos.



viernes, diciembre 02, 2005

Serializacion de Objetos por Socket

Un problema grave que ha acosado al SIG todo este tiempo desde su inicio ha sido la lenta serializacion de los objetos cuando son mandados por el Socket de red, esto es tema conocido por todo aquel que alguna vez haya creado aplicaciones con modelo Cliente/Servidor y donde el traspaso de grandes volumenes de informacion por la red es necesario (como en el caso del SIG). Es por eso que en el SIG se han hecho varias optimizaciones para lograr una mayor eficiencia en el desempeño de la aplicacion, como la transmision binaria de los datos (en un comiezo se hacia como XML), la creacion de caches de DLLs que disminuyen notablemente el traslado de informacion de este tipo por la red, el uso de puerto dedicado por conexion (en un inicio se hacian todas las operaciones por un puerto bloqueado) y ahora (necesariamente) la transformacion de los metodos de serializacion de un numero limitado de objetos por el socket de forma que la informacion a trasmitir se minimize al maximo, para lo cual, cada una de las consultas al servidor seran en un protocolo binario, documentado en las especificaciones del SIG.

Esta serializacion de objetos es recomendada por un articulo en MSDN sobre Sockets

http://www.microsoft.com/spanish/msdn/articulos/
archivo/41103/voices/csharp09182003.asp

el cual recomienda el uso de una interfaz ISocketObject para el manejo de la serializacion binaria personalizada.

Para mañana espero que este funcionando perfecto.

Datos personales

Licenciado en Ciencias de la Computacion, Facultad de Matematicas y Computacion, Universidad de la Habana, 2004. Telefono: 45-3619, Cel: 282-8661