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

miércoles, enero 25, 2006

Localizacion en SIG, preparados para todo

Desarrollando parte de los modulos del SIG en una PC prestada, me di cuenta que casi todos los modulos funcionaban mal y la razon aparente de todo eran la configuracion regional del equipo que era Español (España) que tiene configurado las fechas en el formato dd/MM/yyyy y en el formato de numero decimal la coma es utilizada como separador (Ej. 190,50). Este particular de la coma como separador de los lugares decimales fue lo desencadeno que reconociera los errores de localizacion y se le incorporara al kernel una clase de localizacion para el tratamiento de estos datos, ya sea el formato decimal, la conversion de numeros flotantes para insercion en bases de datos o la conversion de fechas para independencia de metodo de conversion por el servidor de datos, ademas de que todos los modulos hechos hasta la fecha fueron chequeados y ajustados para realizar estas tareas y recompilados. Quedando el SIG Proyectos, Logistica y Facturacion listo para localizacion regional, solo faltando el apartado de idiomas que mas adelante sera resuelto, aunque ya los modulos pueden incorporar informacion de texto localizable sin necesidad de hacer cambios en el SIG Kernel.
Inicialmente se proveeran 3 idiomas (Ingles, Español, Portugues)

lunes, enero 16, 2006

SIG Mis Registros, comenzo a ser usado

El Modulo SIG Mis Registros comenzo a ser usado en el sistema SIG de la empresa, para satisfaccion de varios usuarios, pioneros en el uso del sistema que han comenzado con alguna ayuda a definir sus propios registros de datos, ya sean para gestiones aduanales, registros financieros, de entrada y salida de documentos, de emision de facturas , etc. Es evidente que este modulo no competira en funcionalidades con el resto de los modulos planteados para el area de Importaciones, Logistica y Facturacion, que tienen la posibilidad de interelacionar sus datos para darle seguimiento constante a la cadena de suministro de la empresa de una manera mas eficiente, si ayudara a los usuarios a irse familiarizando con la interfaz del SIG, con la forma en la que el SIG gestiona la informacion y todas las facilidades que brinda de una forma coordinada y coherente.
El impacto de este modulo es grande y como en definitiva este es un blog para compartir y para desarrollar, quisiera poner a disposicion de la comunidad el diagrama relacional de las tablas que potencian el modulo de Mis Registros, el cual es el mejor acercamiento al modelo de desarrollo empresarial libre que vengo promoviendo hasta ahora y que haya programado. Otras versiones iran surgiendo, evidentemente, ya les comentare los resultados aca. y sobre el plan de desarrollo del modelo de aplicaciones empresariales que estamos diseñando, ya espero que con la ayuda del Lic. Luis (el loco) Fernandez, gran programador y amigo mio que esta dispuesto a colaborar con el proyecto aun antes de conocerlo, espero que sume sus ideas a las mias y pueda salir a la luz, despues de tanto tiempo de espera.
Aqui esta el comentado diagrama, quizas por la resolucion de la imagen no se definan bien los nombres de los campos y/o las relaciones, de ser asi, escribame a mi correo (ernestofreyre@yahoo.com) para hacerle llegar una version mas grande y nitida. Sirvase pues a implementar una version libre de Mis Registros y pruebelo en su ambiente productivo (pruebelo en una arquitectura cliente/servidor para impactar mas en los resultados) y notara que las personas que trabajan en el estaran siempre dispuestas (si son astutas) a adoptar rapidamente soluciones tecnologicas que alivien su carga de trabajo y mejoren su desempeño laboral.



jueves, enero 12, 2006

SIG Mis Registros

Dada la gran cantidad de registros propios que algunos usuarios del SIG llevan y que no son objetivos del sistema desarrollar en estos momentos, he decidido crear un modulo de MisRegistros, donde los usuarios del SIG puedan crear sus propias tablas de registro y mantener estas con los datos que ellos mismos van insertando y manteniendo, pudiendo desde un entorno sencillo, definirlas, mantenerlas, adicionar registros, borrarlos, actualizarlos, compartirlas con otros usuarios, realizar filtrados, búsquedas, reportes, etc.

Los tipos de datos estándares son:
- Cadena de caracteres alfanuméricos.
- Numero entero
- Numero decimal
- Fecha
- Fichero asociado
- Verdadero/Falso
- Nomencladores sencillos (Valor a escoger, textual de selección, Ej. Femenino, Masculino, con posibilidades de operaciones sobre estos datos, adicionar, editar, borrar)

Los registros se pueden Crear, Cambiar, Actualizar, Borrar y Compartir por todos los usuarios y los usuarios con permisos podrán ver todos los registros existentes en el sistema y realizar con ellos todas las acciones antes mencionadas.

Este modulo le dará la posibilidad a los usuarios de Crear sus propios registros de datos y poder tener funcionalidades muy simples sobre estos que incluyen: Listar, Adicionar elementos, Editar elementos, Borrar elementos, realizar búsquedas, Filtrado de datos, Impresión de listados, Envío por correo, etc.

Espero que ayude en la implantacion del SIG en la empresa.

martes, enero 10, 2006

SIG Updates Listo, proximo feature: Replicacion de datos

El subsistema de Updates del SIG ya esta listo, como se describio en anteriores post, el sistema de Updates del SIG permite que nuevas funcionalidades sean añadidas al sistema en ejecucion, mejoras, cambios de DLLs, etc. de forma jerarquica, permitiendo que sucesivas actualizaciones sean aplicadas de forma ordenada y que la implantacion y/o adaptacion de los modulos del sistema ERP de la empresa sea progresiva.

Proxima feature: Replicacion de datos.

La replicacion de datos en servidores es un tema bien conocido por todos y su utilidad practica reconocida en ambientes donde las multiples redes que componen la infraestructura de comunicaciones de la empresa estan separadas fisicamente pero en comunicacion por algun tipo de medio como correo electronico. Este es el caso particular de mi empresa, y por lo cual me veo en la situacion de incorporarle al SIG algunas herramientas de replicacion, para que los datos que se quieran replicar hacia otros servidores SIG puedan hacerse automaticamente.
El proceso tengo planeado hacerlo por correo, con una cuenta asociada al SIG y con varias opciones para hacerlo automatico o manual, previendo las operaciones de insercion, actualizacion y borrado de los datos.

lunes, enero 09, 2006

ERP y la mentalidad de cambio

Los sistemas ERP generan anualmente billones de dolares de beneficios a los proveedores mundiales de este tipo de software, las grandes empresas y trasnacionales de todo el mundo los utilizan, asi como las pymes (Pequeña y Mediana Empresa) y organizaciones y entidades estatales de todos los paises en desarrollo. Es tambien muy grande el beneficio que por concepto de retorno de inversion y el logro de ventajas competitivas que repercuten en las utilidades de las empresas y aun asi es comun encontrar muchos casos donde la implantacion de un sistema ERP, sea problematica y lejos de generar ganancias, genere perdidas. A que se debe esto?
Pues una gran cantidad de fuentes señalan la necesidad de poner especial atencion a varios aspectos, como la capacitacion de los usuarios del nuevo sistema, la adaptacion y mentalidad de cambio que se requiere por parte de estos, la paciencia que requiere el proceso de implantacion (generalmente de 1 a 3 años), etc.
El SIG es un sistema que por su sencillez puede adaptarse a los entornos facilmente, esta programado para ser extensible en ejecucion (on-line sin detener la marcha del servidor) con un porciento de disponibilidad alto, inclusive para hacer actualizaciones de los clientes y el kernel de operacion (en el cliente, el servidor por supuesto que es necesario detenerlo), diseñado para implantacion progresiva de modulos y el desarrollo de estos y por su impresionante esquema de seguridad.
Pero mentalidad de cambio ante todo (acabo de discutir con mi jefe) sobre el sistema y me dice que a el le presionan por poner "algo" (una funcionalidad banal que el sistema SIG de Proyectos, Logistica y Facturacion incluye) y que lo que yo hice no fue lo que se pidio y que esta de mas y que (horror) las departamentos de la empresa son independientes y no tienen nada que ver unos con otros, que cada cual hace lo suyo (mi jefe tiene 78 o mas).
Es evidente que la mentalidad de cambio empieza por el Departamento Tecnico.

viernes, enero 06, 2006

ERP Orientados a actividad Empresarial, Viabilidad y una alternativa.

Empiezo a cuestionarme la viabilidad de desarrollar sistemas ERP orientados a alguna actividad empresarial en cuestion, grandes proveedores de Soluciones ERP como SAP, Oracle, Baan, etc. asi lo hacen y no podria imaginarme el costo de tales desarrollos sobre todo cuando la principal materia para tales desafios es el Know-How de los especialistas que en esas ramas conocen mejor que nadie las particularidades de cada caso. Es evidente que un nivel de funcionalidad uniforme puede ser logrado, basandose en abstracciones de origen legal, contable, economico, pero cuando la actividad objeto de la empresa necesite ser modelada y automatizada no va a ver quien concentre ni generalice tales procesos centralmente.
De ahi que la tarea de desarrollar ERP's Cubanos que suplan las necesidades de automatizacion de las empresas, con vistas a la migracion a software libre, se vera afectada economicamente, pues no creo que exista voluntad por parte de estos especialistas de involucrarse en tales encomiendas y mucho menos siguiendo el patron de reconocimiento y remuneracion que viene aparejado con los proyectos libres. Quedando el terreno listo para las empresas y casas de software cubanas o a saber particulares asociados a ellas de hacer la labor de estudio de casos y/o contratar a los especialistas que aporten el conocimiento necesario para este fin. o.....
La alternativa que se puede seguir es definir una metodologia donde estos especialistas involuntariamente se involucren en el desarrollo de los sistemas, y donde las particularidades especificas a la empresa sean cubiertas por él en el ejercicio de la modelacion de los procesos, datos y tareas que evidentemente generan todos los sistemas de ERP, mediante herramientas que siempre con un nivel de accesibilidad, facilidad, seguridad, eficiencia y correccion garantizadas, logren acercar la tarea del desarrollo de sistemas al usuario final.
Tales herramientas deberan contar con al menos todas las funcionalidades especificadas en la Primera Propuesta a Linux-Prog hecha en este blog y comentada en la lista Linux-Prog del sitio www.softwarelibre.cu. Ademas de preveer actualizaciones de definiciones, extension de funcionalidades (como auditorias, workflow, comunicaciones, etc.), en fin un cambio infinito que suponga mejoras en las caracteristicas de los sistemas y la forma en que estos interactuan con los usuarios y entre ellos con vista a una integracion mucho mayor que suponga una mejorar en el panorama informatico y la sociedad de la informacion cubana.


martes, enero 03, 2006

Sistema de Updates para el SIG

Las actualizaciones de cualquier sistema en produccion siempre es compleja, generalmente causando detenciones que afectan la disponibilidad y donde en algunos casos puede llegar a afectar economicamente la entidad.
Ya en el SIG se venia trabajando para mejorar la disponibilidad, desde el cambio en caliente de DLLs de modulos, las mejora de rendimiento en cuanto a usuarios, hilos de ejecucion, recolector de usuarios inactivos, etc. Ahora presentamos una manera de actualizar los sistemas sin que estos dejen de funcionar, al punto de añadir funcionalidades completamente nuevas, hacer reparaciones de bugs, parches de seguridad, etc.

El sistema de Updates del SIG
  • Se le incorpora al Editor una herramienta para configurar Updates, que genera ficheros compactados con la informacion a actualizar.
  • Se le incorpora al Server una opcion para actualizarse, donde se escogera el fichero de actualizacion y se aplicara este sin que el Servidor deje de funcionar, aplicandosele a los nuevos usuarios la actualizacion hecha y a los usuarios que aun esten conectados hasta el nivel de DLLs.
  • Los Updates son jerarquicos, (o sea un Update tiene precedencia sobre otros)
  • Los Updates contienen Modulos y sus componentes internos (Modulos, DLLs, etc.), Scripts SQL (para transformacion de bases de datos), Identificador, Definicion de Precedencia y Descripcion.
De esta manera el SIG queda en condiciones de mejorar su disponibilidad acercandose a los criterios de Alta disponibilidad deseables en todo sistema de gestion.


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.

miércoles, noviembre 30, 2005

Soporte en el SIG para Grids de datos editables.

Haciendo un rehuso de las librerias SourceGrid2 del sitio www.devage.com de Davide Icardi, el SIG brinda soporte para componentes de GRID, encapsulando la DLL de Icardi de manera que el usuario no tenga que hacer referencias a esta para desarrollar sus modulos.

Actualmente 3 componentes utilizan la DLL SourceGrid2

  1. QueryBrowserControl, control para la visualizacion avanzada de registros de consultas SQL, con funcionalidades de operaciones con datos, Insercion, Actualizacion, Borrado, Impresion, etc. Y ademas cuenta con la tecnologia de Filtros Inteligentes descripta en un articulo de este blog.
  2. SmallQueryBrowserControl, control con las mismas caracteristicas de QueryBrowserControl, aunque reducidas en aspecto y con la particularidad de funcionar sin necesidad de consultas SQL.
  3. EditableDataControl, Control del listado, con funcionalidades de edicion en columnas especificas y eventos asociados, muy util en ventanas con gran cantidad de elementos de este tipo donde la edicion se puede realizar in situ.
Una de las bugs reconocidos de SourceGrid2 es su incompatibilidad (esperamos que temporal) con los clientes de ventanas MDI (Multiple Document Interface) donde si tenemos una ventana abierta y maximizada con un componente Grid, entonces si se abre otra ventana con componente Grid la aplicacion se vuelve inestable y se bloquea o tiene comportamiento extraño si para esta se ha usado alguno de los metodos de AutoSize, Stretch o AutoStretch, para lo cual es necesario en el uso de los componentes del SIG, proporcionar los anchos de las columnas deseados.

Mas adelante les comentare de otros componentes rehusados en el SIG.

Soporte en el SIG para versionado de DLLs

EL SIG, ya originalmente fue diseñado para de forma segura, proveer a los usuarios de sistemas de gestion de las herramientas necesarias para el trabajo con bases de datos, esto es que los sistemas de gestion se programan modularmente y estas DLLs con la funcionalidad son colgadas en la red en un servidor con una estructura determinada y un esquema de seguridad tal que cuando los usuarios del sistema se registran estos reciben informacion sobre el esquema de la aplicacion y cuando realizan las acciones las DLLs necesarias son enviadas desde el servidor y corridas localmente que mediante una interfaz de datos con el servidor realizan las operaciones de datos en el servidor. Para toda esta operacion se han establecido caches de DLLs mediante versionado donde si el usuario no tiene la ultima version de la DLL en el cache pues esta se manda desde el servidor actualizandose sin necesidad de volver a bajarlas en otro momento, una optimizacion importante cuando se dispone de conexiones dialup de baja velocidad.

Otra mejora de optimizacion es la utilizacion de un cliente actualizable por el mismo proceso, en resumen el usuario nunca dispone de la ultima version del cliente y el nucleo del SIG por lo que estos son bajados a la maquina del cliente desde la red en cada ejecucion (red local, por supuesto, en caso de no poder realizarse la operacion, se utilizaria el ultimo cliente utilzado).

Aun quedan mejoras por introducir en el SIG, pero a medida que se esta utilizando, nueva optimizaciones son incorporadas y facilmente actualizadas en las maquinas clientes y en las aplicaciones sin requerir gran esfuerzo de mantenimiento.

sábado, noviembre 19, 2005

Anterior articulo sin imagenes

El anterior articulo dedicado a la Navegación Guiada, no contenia imagenes por ser dificiles para introducir en el editor de blogs de Blogger.com, si es de su interes solicite el documento original y le sera enviado por correo, para esto escriba a: ernesto@consumimport.mincex.cu, con gusto le enviare una copia con las imagenes correctas.

Datos personales

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