sep 30

Mejorar el rendimiento en ejecución

Posted in analisis, foro, ideas, utilidades

Estas ultimas semanas ha habido mucho ambiente con algunos temas del foro, y pese a que me gustaria haber participado mas, no he podido. Ya sabeis, ¡me he pasado mucho tiempo en la cocina!, :)

Y al margen de suplicas y quejas, el trasfondo de todo, es que muchas veces hacemos las cosas mal, y la primera reaccion es intentar culpar a los demas.

Como no he tenido fisicamente tiempo, no he podido realizar pruebas de rendimiento para concretar esta informacion con mas detalle, pero si hay conceptos que deberiamos tener muy claros para mejorar la respuesta de las aplicaciones.

Pero, igual que antes he tratado de defender a Velneo que no tiene la culpa de nuestros errores como programadores, tambien voy a decir que si tiene la culpa de no publicar un articulo donde se haga hincapie en estos aspectos, y se deje claro que opciones son las mas recomendables, en segun que situaciones.

Y es que, cuando nosotros trabajamos bien, y realizamos desarrollos ejemplares, los clientes estan contentos y hablan bien de Velneo y tambien de nosotros, pero cuando no es asi, el cliente termina cansado, descontento y la culpa, no suele ir al programador, porque el programador trata de liberarse del problema culpando a la herramienta.

Sea por una razon o por otra, lo que si esta claro, es que deberiamos tener una serie de Test comparativos de respuesta en distintas situaciones:

Tenemos o deberiamos tener claro que:

  1. un proceso en 1 plano (ejecutado en la maquina del cliente), es mas lento que un proceso en 3 plano (ejecutado en el servidor). Pero hay veces que no podemos ejecutar el proceso en 3 plano, p.e. cuando tenemos que mostrar mensajes en el interfaz del cliente, o en el proceso debe interactuar el usuario de alguna forma.
  2. una busqueda en 1 plano (en el cliente), es mas lenta que si ejecutamos la misma busqueda en 3 plano (en el servidor).
  3. una lupa es mucho mas lenta siempre que Cargar lista y que una Busqueda por un indice, pero si no tenemos mas remedio, al menos, deberiamos ejecutar la lupa en 3 plano (tutor de busquedas y lupas en 3 plano).
  4. mostrar una rejilla de una tabla siempre es mas rapido si no aparecen campos Formula en el contenido de las columnas, es mucho mejor mostrar campos numericos o alfabeticos con contenido inicial.
  5. mostrar campos en una rejilla usando “punteros singular de plural por indice“, penaliza el rendimiento con grandes cantidades de registros (incluido el dia 15-dic-2010)
  6. un campo numerico con una formula en su contenido inicial es mucho mas eficiente que un campo formula, sobre todo si este debe aparecer en rejillas o informes con calculos masivos.

Pero hay otros conceptos que no quedan tan claros, ¿que es mas rapido?, o ¿como afecta al servidor? en las siguientes comparaciones:

  1. Un proceso con Cargar lista, o un proceso que lanza una Busqueda, si tenemos en cuenta que en ambos casos se utilizaria el mismo indice o grupo de indices, sabiendo que los 2 se ejecutarian en el mismo plano. Que diferencias habria si ejecutasemos en 1 plano y que diferencias habria si ejecutasemos en 3 plano, p.e.
  2. Del mismo modo, y bajo el mismo plano de ejecucion, cuando las circunstancias lo permitan, que se debe usar, el Tubo “de Lista” o “de Ficha“.
  3. En una rejilla, el rendimiento de Suma acumulada de toda la columna, deberia ser igual que usar la suma acumulada de un campo, si indicamos como campo esa misma columna y no indicamos condiciones. Pero, ¿es asi?
  4. Cuanto tiempo puede permanecer en ejecucion un proceso en el servidor antes de que sea interrumpido y las transacciones deshechas.
  5. Si tenemos que hacer un proceso de carga masiva de datos, creando registros nuevos, que es mas rapido, el Tubo de ficha o Crear nueva ficha en memoria + Alta de ficha

Seguro que algo se queda en el tintero pero si sois tan amables, ire actualizando el “post” a medida que se aporten nuevas cuestiones.

Visto esto, no se trata de comparar rendimientos de Velneo V7 con otras herramientas, ¡NO!, no nos interesa saber que V7 es mejor o peor que SQL server o que Oracle.

Lo que realmente nos interesa es como aprovechar el rendimiento del servidor al maximo, eso ¡SI!

¡¡¡ queremos programar bien, y optener el mejor rendimiento de la base de datos !!! y para ello necesitamos conocer esos pequeños detalles que marcan la diferencia entre un “funcionamiento correcto” y un “funcionamiento optimo

PDF Printer    Enviar artculo en formato PDF   
comments: 4 »
sep 29

Variables de tipo Array en 3D

Posted in ideas, utilidades

Como os dije hace poco tiempo, ese mismo dia que iniciamos la gran comilona, 😀 , es posible usar variables de tipo Array en 3D, y hoy vamos a desvelar como.

Para empezar dire que hay 2 metodos que se me ocurren ahora mismo, pero eso no significa que sean los unicos, asi que os animo a comentar si teneis nuevas ideas:

  1. Como he dicho se me ocurren 2 formas, y esta primera es la mas sencilla. Para ponerla en practica solo necesitas buscar unas gafas 3D de las que usaste para ver la peli de Avatar, y veras como tu Array empieza a salir de la pantalla como si te fuera a comer, 😉
  2. Y la segunda, es algo mas complicado, pero no te comera. Para este segundo metodo, necesitas unicamente una “Tabla”, si tan sencillo como eso, ahora te lo explico con mas detalle.

Vamos a crear una tabla, y unicamente necesitamos 4 campos:

  • #DIM_1 , este campo debe ser numerico y se corresponde con el identificador que usaremos para la primera dimension del Array
  • #DIM_2 , este campo debe ser numerico y se corresponde con el identificador que usaremos para la segunda dimension del Array
  • #DIM_3 , este campo debe ser numerico y se corresponde con el identificador que usaremos para la tercera dimension del Array
  • #CONTENIDO, es un campo alfabetico o numerico, dependiendo de cual sea el contenido que almacenaremos en el Array

Ya tenemos la tabla, ahora crearemos 3 indices, uno para cada uno de los campos #DIM_? y esto nos facilitara la labor de busqueda de valores en el array.

De esta forma, con una busqueda compleja, que usa los 3 indices podemos buscar cualquier valor, del array y en cualquiera de las dimensiones.

Para crear el array, solo necesitamos un proceso con 3 bucles anidados que permiten crear todos los valores,

¿Crees que es posible viajar en el tiempo?

Pues si eres de los que creen, estas de suerte, toma nota:

Crea un nuevo campo #DIM_4 en la tabla, crea un nuevo indice para ese campo, modifica la busqueda para incluir el nuevo indice en ella, y modifica los procesos para crear el array anidando un 4 bucle, y realiza estos cambios en todos los demas objetos que sean necesarios, y veras como el milagro se hace realidad y entras en la 4ª Dimension 😀 (el tiempo)

No se si es lo que esperabas, pero es una solucion a un problema concreto.

Quiza esperabas que de verdad, los Arrays podian ser en 3D, pero piensalo bien, una tabla en memoria definida con esta estructura y un Array “Local”, en que se diferencian. Y si necesitas que el Array sea “Global” o “Publico”, pues solo tienes que hacerlo en una Tabla con persistencia en disco.

Este truco es valido para V7 y tambien para su hermana (v6.x) 😉

Si estas decepcionado, lo siento, … para hacer milagros me estoy entrenando.

PDF Creator    Enviar artculo en formato PDF   
comments: 6 »
sep 28

Pack: La receta del dia

Posted in analisis, packs, vDevelop

Aqui os dejo todos los platos del menu, por si alguien quiere repetir:

Ahora, que ya has descansado de la comilona, ¿que piensas?

¿Te gusto el post?

¿Te parece posible o probable esta estructura para V7?

¿Crees que Velneo nos diria cuanto me he acercado?

¿O crees simplemente que ya no tengo neuronas?

😀

PDF    Enviar artculo en formato PDF   
comments: 4 »
sep 27

Primeras imagenes del E.R.P.

Posted in aplicaciones, videos

Aqui teneis un pequeño video de unos 10 minutos , para que podais ver las opciones mas basicas del E.R.P., mas adelante preparare otro video con caracteristicas mas avanzadas y algo mas de duracion.

Video del E.R.P.

Edito:

Y aqui os dejo algunas de las caracteristicas del E.R.P.

¿Que le pedirias a tu E.R.P.?

PDF    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Primeras imagenes del E.R.P.
sep 27

Video de la aplicacion de Flota

Posted in aplicaciones, videos

Aqui teneis unas imagenes del funcionamiento de la aplicacion Flota en V7, el video es muy corto, no llega a 4 minutos, para que no perdais mucho tiempo y podais ver el resultado.

Gestion de flota

Edito:

Puedes leer mas informacion en el siguiente post:

Flota en fase beta

PDF    Enviar artculo en formato PDF   
comments: 1 »
sep 27

El chupito (La receta del dia – y VI)

Posted in analisis, vDevelop

el chupito

el chupito

El chupito de hiervas que no falte, aunque estemos “a reventar”

¿Has prestado mucha atencion a los POST anteriores relacionados?, si la respuesta es afirmativa, ¿serias capaz de decir que es lo que falta en el grafico presentado en el postre?, porque ¡esta incompleto!, y no me refiero a los cambios realizados para abstraer la tabla de objetos. Si lo sabes, haz el favor de ilustrarnos, que ya perdi la neurona por completo.

Y ahora que tenemos una idea de como podria funcionar V7, parece todo tan facil.

Pues no, no es tan facil, ahora hay que conseguir que todos los objetos funcionen correctamente, y que se representen graficamente segun sus propiedades y atributos.

La verdad, no estoy seguro de cuanto me he podido acercar a lo que seria el diseño de V7, eso si, sin profundizar demasiado para no complicarlo mas.

Pero si solo me hubiera acercado un poquito, ahora el chupito, deberia ser una invitacion por parte de Velneo, ¿como?

Pues creando una API que nos permitiera cambiar algunas de las propiedades de los objetos “en caliente”, y ¿para que?

Pues ahora imaginad que queremos crear un casillero, pero no se cuantas columnas debe tener, porque el nº de columnas va a depender del nº de registros que hay en una tabla. Si pudieramos cambiar esta propiedad en el objeto casillero, en caliente, seria un puntazo. Claro que esto tambien se podria solucionar con un campo formula en la propiedad “Nº de columnas”.

Ahora solo falta imaginar que otras propiedades de objetos deberian estar abiertas al desarrollador, (pero no todas) que luego surgen los problemas.

Yo me pongo a imaginar, y se me ocurre, ¿por que no?

Y si pudieramos exportar las propiedades de los objetos en algun formato estandar como XML, CSV, LML :) , JSON.

Y si ademas pudieramos importar los objetos y sus propiedades en alguno de estos formatos, esto nos permitiria crear objetos en caliente (he dicho “objetos”, no “clases”)

Sigo soñando … 😀

Y luego me despierto … :(

Lo dicho, al final para que sirve todo esto que os he contado, ¡para nada!, solo era una chifladura mia, o ¿si sirve?

PDF Creator    Enviar artculo en formato PDF   
comments: 3 »
sep 24

El postre (La receta del dia: y V)

Posted in analisis, vDevelop

Y para finalizar, un postre helado, nata con nueces y un poquito de caramelo liquido, “uhmm”

Y de postre, como quedaria el esquema completo de lo visto hasta el momento,

Esquema completo
Esquema completo

Pero esto no es lo que habiamos visto en los platos anteriores, bueno, el primer plato si, pero el segundo ha cambiado,

¡CIERTO!, el segundo plato lo hemos cambiado, pero ha sido para mejorar.

Por eso es el postre, he llevado la abstraccion al limite, y eso significa que “OBJETOS” permite definir cualquier tipo de objeto, una solucion, un proyecto (de cualquier tipo), un objeto de un proyecto (una tabla, un formulario, un informe, una variable, un tubo de ficha, etc.)

Y ¿como podemos hacer esto?, pues utilizando las clases. Si ya hemos definido clases para cada tipo de objeto, ahora solo tenemos que crear un objeto y decirle a que clase pertenece.

Ademas, los proyectos, son objetos ¿no?, tienen propiedades, y los Objetos, pues tambien tienen propiedades, y por supuesto, los Controles (sub-objetos), tambien tienen propiedades.

Pues fijate en el grafico, y veras como “Clases” hereda de si misma, para permitir sub-clases, y del mismo modo, Objetos, puede heredar de si misma para tener sub-objetos o “controles”. De este modo un INDICE es un sub-objeto de TABLA, y pertenece a una sub-clase “tabla.indice” que hereda de “tabla

Y ahora que nos hemos comido el postre y ha finalizado el banquete, espero que esteis saciados y quiza necesiteis una siesta para reposar tanta comilona , pero no olvideis una cosa,

hay que lavarse los dientes, 😀

¿alguien quiere un chupito? …

Create PDF    Enviar artculo en formato PDF   
comments: 3 »
sep 23

El segundo plato (La receta del dia IV)

Posted in analisis, vDevelop

Objetos

Objetos

Por fin, ya tenemos el entrecot a la pimienta, aunque si alguien desea pescado, que lo diga …

Ahora si, vamos a crear nuestros primeros objetos, y para eso teniamos la estructura inicial, que combinada con el primer plato, nos va a permitir crear cualquier objeto

¿Como?

Sencillo, ahora creamos un objeto y le indicamos que pertenece a la clase “variable“, y como esta clase ya sabe mucho, nos muestra unicamente las propiedades que podemos asignar al objeto.

Pero, si estamos dentro de un proyecto de datos, como sabemos que objetos podemos crear. Pues sencillo, solo tenemos que hacer una consulta de todas las sub-clases que heredan de proyecto y que tengan la propiedad de_datos = True, asi tenemos como resultado: Variables, Tablas, Tablas estaticas, Constantes, Funciones, etc.

Y ahora que ya hemos creado el objeto, este hereda todas las propiedades de la clase a la que pertenece y ¡voila!, ahora ya solo queda modificar los parametros de esas propiedades para conseguir un objeto unico y diferente al resto.

Entre las propiedades del objeto tenemos el Identificador, el Nombre o descripcion, Comentarios, Tipo de variable, etc.

Pero que nadie se levante, que aun nos queda el postre.

PDF Printer    Enviar artculo en formato PDF   
comments: 4 »
sep 22

El primer plato (La receta del dia III)

Posted in analisis, vDevelop

Ahora que ya tenemos los ingredientes y hemos puesto unos entrantes para hacer la espera mas llevadera,veamos que tal guisa el cocinero,

de primero, una sopita de marisco, rica y facil de digerir, 😉

Clases y propiedades

Clases y propiedades

Ahora necesitamos definir las diferentes propiedades que necesitamos para cada objeto, y creamos una tabla para este efecto.

Las clases, pues de lo mas importante que vamos a necesitar:

Cada clase nos va a permitir definir un tipo de objeto, y a cada una de estas clases definidas, le vamos a asignar un grupo de propiedades, p.e.:

  • Si definimos la clase “proyecto“, podriamos asignarle las propiedades: de_datos (que admitiria los valores True/False) y la propiedad de_aplicacion (tambien con los valores True/False)
  • Podriamos definir una sub-clase “variable” (proyecto.variable), esto significa que tendria las propiedades de la clase principal “proyecto” y ademas, sus propios atributos. Asi una variable global, podriamos saber si puede pertenecer a un proyecto de datos, a uno de aplicaciones, o incluso a ambos. Y como atributos propios, podemos saber si la variable es Numerica, Alfabetica, Booleana, etc, ademas de si es Array (True/False), y si lo es, el numero de elmentos.
  • Podriamos definir tantas clases como objetos tengamos disponibles, y a cada uno, darle unas propiedades diferentes.

Podria incluir mas ejemplos con otros objetos, pero no quiero hacer el articulo mas pesado de lo absolutamente necesario y es para todos los objetos igual, definir sus propiedades.

Las clases, ademas son perfectas para transmitir los genes, como hemos visto al crear la clase “variable”, que hereda de su progenitor mas cercano, el “proyecto”.

Pero claro, hasta ahora, aun no hemos creado ningun objeto, lo unico que podemos hacer es: definir las propiedades que tendra cada objeto, pero no tenemos los objetos, aun no.

Se va abriendo el apetito, eh!

Voy pidiendo el entrecot a la pimienta, 😀

PDF Printer    Enviar artculo en formato PDF   
comments: 6 »
sep 21

Los entrantes (La receta del dia II)

Posted in analisis, vDevelop

Antes de empezar a cocinar nuestra receta, tenemos que preparar los ingredientes, y porque no decirlo, el comensal tiene que esperar un poco, y asi tendra mas apetito y sera mas permisivo ante posibles excesos o carencias en los condimentos.

Pero si no deseais esperar, se preparan unos entrantes y a picar, 😉

Asi pues, voy a plantear un ejemplo:

Imaginad que debemos desarrollar un proyecto con V7, o un mapa con V6 (da igual), y la mision es permitir crear los diferentes objetos (tablas, formularios, informes, etc) que luego vamos a necesitar para nuestro interfaz.

¿Que es lo primero que necesitariamos?

La respuesta es sencilla, lo primero que hacemos en todos los proyectos es definir las estructuras de datos, tablas, campos, indices, etc, definimos “el proyecto de datos”. Y si usamos V6, pues definir la parte izquierda del editor.

Y como seria esta estructura para V6:

Esquema del editor en V6

Esquema del editor en V6

Al menos asi es como hice el esquema de datos para los objetos de la V6, pero esto es pura ficcion, a menos que alquien de Velneo lo ratifique.

Y ahora que todo es mucho mas fino, esta mas pulido y mejorado (al menos en teoria), en V7 seria:

Esquema de vDevelop V7

Esquema de vDevelop V7

La diferencia es clara, la abstraccion de V7 es mucho mas eficiente.

Con estas estructuras de tablas, ya seriamos capaces de definir practicamente cualquier objeto, ¿no?, pues va a ser que ¡NO!

Y es que, aun falta mucho para llegar al postre, aun estamos en los entrantes, 😀 (no olvideis lavaros los dientes al finalizar )

¿vamos a por el primer plato?

PDF Printer    Enviar artculo en formato PDF   
comments: 5 »