oct 17

¡Reserva el libro ya!

Posted in Life is soft!

Lo prometido es deuda, 😀 , y aunque en realidad no había prometido nada, si es cierto que algunos de vosotros os habiais interesado por el libro, por su contenido y por algún que otro detalle.

Asi pues, he decidido publicar el índice de capítulos de los que consta el libro, con más de 450 páginas repartidas en 17 capítulos y 13 apéndices, para aprender a programar con Velneo V7.

Cambia el chip con Velneo V7

Índice de capítulos:

  1. Aplicaciones que puedes desarrollar.
  2. La arquitectura y sus componentes.
  3. Obtener el servidor de Velneo V7 y los componentes.
  4. Administrar usuarios y grupos.
  5. Crear soluciones y proyectos.
  6. La estructura de la base de datos.
  7. Completando el proyecto de datos.
  8. Programar la interfaz de la aplicación.
  9. Objetos básicos.
  10. Crear las instancias de datos y de aplicación.
  11. Ejecutar la aplicación.
  12. Búsquedas, funciones y procesos.
  13. Informes e impresoras lógicas.
  14. Profundizando en los objetos.
  15. Aplicando vDiseño.
  16. Instalación de la solución.
  17. Cátalogo de Open Apps.
  • Apéndices

Y voy a desvelar otro secretillo, que parecía levantar especial interés, la portada del mismo.

Aquí la teneis:

Cambia el chip con Velneo V7

Y sobre todo, para aquellos que deseen recoger su ejemplar en papel durante el evento ¡Life Is Soft 2011! , no olvideis que debeis hacer la reserva desde la pagina de registro del evento, antes del dia 25 de este mes.

Si no podeis asistir, podreis consegirlo en papel, PDF o ePub a partir de Life Is Soft directamente desde la tienda OnLine.

Estareis informados a través del blog de cualquier nueva noticia y seguiré ampliando información sobre el libro.

Garcias a todos por visitarme.

PDF Creator    Enviar artculo en formato PDF   
comments: 3 »
oct 17

Como acercarnos al MVC

Posted in procesos

Continuación del artículo:

MVC en Velneo V7

A estas alturas de desarrollo de Velneo V7, tengo que decir que lo veo poco viable, pero como no hay nada imposible, voy a dejar aqui una de mis habituales ideas chorras.

Y antes de entrar en detalles vamos a comparar, que es un “Proceso” y que es un “Evento”, pero dejando claro que en adelante, al referirme a Eventos lo hago siempre pensando en los objetos del proyecto de aplicación, quedando excluidos por tanto los “Eventos de tablas” ya que nada tienen que ver con el interfaz:

  • Proceso es, una secuencia de instruciones que se ejecutan en orden secuencial y siguendo las normas de programación estructurada similares a las de cualquier otro lenguaje de programación. Esto quiere decir, que también disponemos de bucles, condiciones, y otras estructuras de flujo que funcionan exactamente igual que en los lenguajes de 3 generación.
  • Evento es, un proceso asociado a un objeto del interfaz de usuario, como puede ser un formulario, una rejilla, etc.

Y en que se asemejan los Procesos y los Eventos, si nos atenemos a esta definición:

  1. Los procesos y los eventos son exactamente iguales en cuanto a la forma de programar y ejecutar. De echo, todas las sentencias que podemos utilizar en los procesos, también están permitidas en los eventos, aunque esto no sucede a la inversa.
  2. Ambos tienen un Origen, que puede ser Ninguno, o una Tabla del proyecto de datos y en caso de ser una tabla, el origen puede ser de Ficha o de Lista
    • Los eventos también pueden ser sin origen, ya que tenemos Formularios Sin origen y en ellos también podemos definir eventos
    • El origen Ficha nos permite poder utilizar un evento en un Formulario y el origen Lista nos permite utilizarlo en objetos de tipo Lista como las Rejillas.

Ahora que ya conocemos las similitudes, ¿cuales son las diferencias?

  1. Los Eventos van siempre asociados a un objeto del interfaz y por tanto se ejecutan siempre en 1º plano, pero desde el evento tambien podemos llamar a otros objetos en 3º plano
  2. Los Eventos, al estar asociados a un objeto del interfaz, permite hacer uso de todas las sentencias de Interfaz, que en los Procesos aparecen desactivadas.
  3. El Proceso es un objeto y el Evento es un Subobjeto de un objeto del proyecto de aplicación.

Inicialmente, la idea de este artículo fué:

Si son tan parecidos, porque no crear un nuevo objeto llamado “Evento” pero externo al objeto, y que nos permita usar las sentencias de Interfaz.

Y una vez creado este objeto, podriamos llamarlo desde varios formularios o varias rejillas (siempre que el origen del Evento se corresponda con el Objeto que lo llama).

De esta forma, el objeto Formulario no necesitaria tener definidos los eventos, solo las “Conexiones de evento” y llamariamos al “Evento” como un objeto independiente y externo al objeto que lo ejecuta.

También pense:

El mismo objeto “Proceso”, seria viable para esta tarea, simplemente con añadirle una nueva propiedad que lo diferencie de los procesos habituales, y que activará las sentencias de interfaz.

Luego podriamos llamar a estos procesos de la misma forma que indiqué anteriormente.

Y finalmente me di cuenta de que,

  • el Evento debe ir unido al objeto, porque al activar las sentencias de Interfaz, con ellas podemos hacer uso de los controles incluidos en cada uno de los objetos (formularios, rejillas, etc.), es decir, desde un Evento puedo usar un control de edición del formulario que lo ejecuta, y ¿que pasa si utilizo el mismo Evento para 2 formularios de la misma tabla (que ésta erá la idea inicial) pero en uno de los formularios no existe dicho control de edición?. Pues que habría problemas, ¡seguro!

Asi pues, desisti de mi idea y de poner esta posibilidad en el “Foro de ideas” y por tanto, de acercarnos un poco mas al MVC,

Pero a veces, de las ideas equivocadas, también sale algo bueno, y en este caso, ha mi me ha servido como escusa perfecta para ver las diferencias y similitudes que existen entre Procesos y Eventos y desarrollar este artículo.

Y llegados a este punto, solo hay una conclusión lógica o moraleja que podemos sacar de este estudio.

Podemos cambiar al protagonista de nuestra peli de espias por cualquier otro (el Modelo) … James Bond, Super Agente 86, Am Brosio, y con ello conseguiremos mejorar notablemente la calidad de la información que guardamos en nuestra base de datos.

Pero, lo que no podemos es, separar la información obtenida (la Vista) y la forma de obtener dicha información: los mamporros, las amenazas y demas (el Controlador).

Imaginaos ahora un espia, que a la primera de cambio, le preguntamos, y sin necesidad de iniciar una tortura como dios manda, nos suelta todo lo que sabe. En este caso ya no estariamos hablando de espias, estariamos hablando de agentes dobles y eso quizá merezca otra historia, pero hoy no, ¡mañññaaaaannnnnaaaaa!

😉

PDF Printer    Enviar artculo en formato PDF   
comments: 1 »
oct 11

Prescindiendo de las variables globales

Posted in foro, programacion

Seguimos con la segunda parte de: ¡Las variables globales son prescindibles?

Claro que se podía mejorar el ejemplo: ¿cómo?

En V7 tenemos un nuevo subobjeto que no se valora lo suficiente, un objeto que dejamos marginado y que en ocasiones usamos, porque no queda mas remedio, la “Variable Local”.

Y es cierto, cuando creamos un Proceso, Evento o Función, no queda más remedio que usarlo, porque las “Variables locales” se van creando a medida que introducimos las sentencias. En condiciones normales, puede ser que incluso funcionen correctamente.

Pero ahora disponemos de “Variables locales” en objetos como la búsqueda, que pueden ser utilizadas en las Condiciones de los índices e incluso como Contenido para realizar la búsqueda por “Parte izquierda” o “Entre limites” de cada componente.

Asi pues, vamos a realizar el mismo ejemplo de ayer, pero esta vez, sin Variables globales:

Creamos una búsqueda, con los mismos componentes que en el ejemplo anterior, y usando los mismos índices: un componente EJE, usando el índice EJE (del campo #EJE de la tabla).

En la búsqueda creamos una variable EJER (numérica), y la utilizamos como Parte izquierda para la resolución del índice.

Y desde el proceso o evento que ejecuta la búsqueda, creamos un manejador de objeto con la búsqueda, asignamos el valor a la(s) variable(s) local(es) y finalizamos Disparando el manejador de objeto , obteniendo como resultado una lista de registros correspondiente a la tabla de la búsqueda.

El resultado debe ser, en el peor de los casos, el mismo que en el ejemplo anterior, con la variable global.

Pero he dicho, en el peor de los casos, porque aunque la lista de registros obtenida va a ser exactamente la misma, el tiempo empleado en realizar la consulta será considearblemente menor, claro dependiendo de cuantos registros tengamos almacenados en dicha tabla.

PDF Download    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Prescindiendo de las variables globales
oct 10

¡Las variables globales son prescindibles?

¿Pregunta? o ¡Afirmación!, he ahí la cuestión …

Asi es, otra de tantas decisiones que hay que tomar, y que YO mismo, como muchos otros, sobre todo de los que aprendimos con versiones anteriores de Velneo, hemos usado (y abusado) de ellas.

V7 es otra cosa, y a veces, nos empeñamos en decir que algo no funciona cuando en realidad somos nosotros los que hacemos un mal uso, o uso incorrecto de los elementos que tenemos a nuestar disposición, y uno de ellos es la Variable global.

Y ya puestos, el título del post incita a cuestionar si el uso de las Variables globales es recomendable o no. Y cada uno tendrá su propia respuesta y estara en la certeza de que sus aplicaciones son las mejores que hay y que todo lo que hace lo hace bien, igual que yo, por supuesto. No estaba criticando a nadie, yo me incluyo en ese paquete.

Pero es bueno reconocer cuando uno se equivoca, porque ello nos permite mejorar y poner los medios para evitar esa y otras equivocaciones similares en el futuro.

La respuesta a esa Pregunta/Afirmación es, por mi parte, una rotunda ¡AFIRMACIÓN!, que voy a escenificar con un sencillo ejemplo, que me temo, somos muchos los que hemos abusado de el (aunque solo puedo confirmar mi experiencia).

Tenemos una variable global “$BC_EJERCICIO@proyecto.dat” y como era costumbre adquirida, al cambiar a V7, esa costumbre paso a ser “un vicio”, y lejos de preguntarnos si era la forma correcta de hacerlo, la usamos y nos autoconvencimos de que debia ser asi.

Tenemos una Búsqueda de la tabla “Facturas”, que es, multiejercico, para este ejemplo, y en la búsqueda usamos un Índice por el campo #BC_EJERCICIO (Ejercicio) para mostrar unicamente las facturas del ejercicio actual.

A la búsqueda le incluimos un componente por el Índice “BC_EJERCICIO”, correposdiente al campo #BC_EJERCICIO, con resolución de la “Parte izquierda” y en el contenido, le indicamos directamente la Variable global: $BC_EJERCICIO@proyecto.dat


Y como realizamos el ejemplo:

Desde un proceso o evento, asignamos el valor a la variable global, lanzamos la búsqueda y retornamos la lista a la salida.

Hasta aqui todo es correcto, y el ejemplo debe funcionar bien.

Pero, …. ¿se puede mejorar el ejemplo?

Pues claro que se puede, piensa en ello y mañana tendremos la solución …

Create PDF    Enviar artculo en formato PDF   
comments: 1 »
oct 7

Cálculos acumulados en la cabecera de página

Posted in ejercicios, foro, utilidades

Se dice, se comenta, se rumorea ….

Que no es posible incluir los acumulados de los importes de una página, al inicio de la página siguiente.

Eso es, lo que pretendemos es incluir un “Suma y sigue …” al inicio de cada página del informe, y surgen un problema en el calculo de los acumulados en las variables que utilizamos para la impresión de dichos importes.

A raíz de aqui, buscamos una solución sencilla que nos resuelva el problema:

y parte de esa solución esta en duplicar las variables y los calculos necesarios para los acumulados.

Asi es, puesto que tenemos dos variables PIE_DEB (para el acumulado del debe) y PIE_HAB (para el acumulado del haber) y que son las que utilizamos en el pie de página del informes (y estos cálculos los hace correctamente).

He decidido que necesitariamos otras 2 variables (aunque en la imagen solo se ve una de ellas) CAB_DEB (para el suma y sigue del Debe) y CAB_HAB (para el suma y sigue del Haber).

Y hasta aqui, no hay diferencias sustanciales en nuestro informe, salvo por el hecho de usar 4 variables en vez de 2.

El informe ya tenia 2 “Cálculos” PIE_DEB y PIE_HAB para realizar las operaciones con las variables PIE_DEB y PIE_HAB respectivamente, y las propiedades en cada uno de ellos para sumar en Modo: Acumulado y en Fórmula, el importe (#IMP_DEBE o #IMP_HABER) de cada una de las columnas.

Con esto, ya conseguimos que aparezcan las sumas en el pie de página correctamente …

Ahora, falta realizar los Cáculos para que aparezca el “Suma y sigue …” en la cabecera de cada página, antes de la primera línea de la página.

Y para eso creamos 2 nuevos Cálculos, uno llamado CAB_DEB y otro llamado CAB_HAB y en ellos usamos las propiedades Modo: Absoluto y en Fórmula, indicamos la diferencia entre el importe de la variable acumulada del pie de pagina anterior y el importe de la linea: PIE_DEB-#IMP_DEBE para la primera columna y PIE_HAB-#IMP_HABER para la segunda.

Y despues de realizar las pruebas con un informe con varias páginas de registros, he podido comprobar que funciona correctamente.

PDF Creator    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Cálculos acumulados en la cabecera de página
oct 5

Un problema menos

Posted in linux, mac, windows

Aqui os dejo un artículo que escribi hace ya tiempo, pero por motivos que ahora no logro recordar, se quedo en el tintero, pero como aún está vigente y es un tema que durante los proximos años cambiará el modo de ver la información, asi que lo dejo caer:

Estas semanas he andado bastante liado por diversos motivos, … todos ellos de trabajo: avanzar en unos proyectos, actualizaciones en otros, … lios, lios y mas lios.

Tomar decisiones es complicado, y hay que tomar tantas decisiones cada dia, 😀

Hoy me he levantado con un mal pie, y he decidido aunque me pese, dar un mal paso. Tenia el ordenador del chico averiado desde hace varias semanas, y tenia que solucionar el entuerto, asi que he decidido (una de tantas decisiones) instalar Linux como sistema operativo, por varias razones. No es la primera vez que instalo Ubuntu, pero casi siempre por motivos de tiempo, y sobre todo porque antes (V6) no podia trabajar con Linux, y poque siempre usaba ordenadores de desecho para instalarlo y probarlo, aunque al final no tenia tiempo para nada.

Dicho y echo, descargo Ubuntu 10.10 y a instalar, y poco mas de 40 min. después ya tenia el escritorio en pantalla y dispuesto para trabajar. Hacia ya bastante tiempo que no lo tocaba, quizá desde la versión 8.10, ya ni lo recuerdo.

El caso es que ahora se me presenta un problema al cual debo dar solución, el ordenador de mi hija tiene Windows XP (original en CD), el de mi hijo tiene Ubuntu 10.10 (original y descargado de http://www.ubuntu.com/), y en los portatiles tengo Windows Vista (original y preinstalado) y Windows 7 (original y preinstalado).

Tengo 4 ordenadores, y cada uno tiene un sistema operativo diferente (tendre que comprarme un Mac para la colección completa), y tengo que trabajar, pero hay veces que tengo que realizar tareas, pruebas que me llevan bastante tiempo y que consumen la potencia del procesador a tope, entonces porque tengo que cruzarme de brazos mientras 2 equipos intercambian información, si tengo otros 2 equipos a mi disposición.

Y la solución empieza a llegar desde la nube.

Antes tenia los documentos en Word, pero si quiero poder utilizarlos en Ubuntu pense en hacerlo  con OpenOffice, bueno, esto ya lo hacia desde hace varios años con una versión de OpenOffice para Windows. Pero ahora quiero más, y ese más, se traduce en quiero los documentos, pero no quiero tener que trasladarlos de un equipo a otro con el PEN, y no quiero tener que montar un Servidor en casa para tener todo el trabajo centralizado.

Habia que decidir que aplicaciones usar:

  1. para los documentos: MS-Office , OpenOffice, CorelOffice, …
  2. para los blogs: WordPress, BlogSpot, Blogger, … (esta decisión ya fue tomada en su dia)
  3. para navegar: Internet Explorer, Firefox, Chrome, Opera, Safari, …
  4. para Chatear: Mesenger, Skype, …
  5. para eMail: Outlook, Yahoo, Hotmail, Gmail, Thunderbird, …
  6. para FTP: Filezilla, CuteFTP, SmartFTP, AceFTP, …
  7. y para programar: Velneo, PHP, Java, .NET

Y la solución a todas estas dudas la encontré en la nube, …

  • para los documentos, GoogleDocs
  • para los articulos del blog, WordPress
  • para navegar, FireFox
  • para chatear, Skype
  • para el correo electronico, WebMail
  • para el FTP, Filezilla
  • y para programar, Velneo V7

y curiosamente, todos ellos tienen algo en común.

  1. A todos ellos puedo acceder desde cualquiera de los ordenadores que tengo en casa y tambien fuera de casa, ya sean Windows o Linux, solo necesito una conexion a internet.
  2. Ahora no me preocupo porque uno de los equipos se pueda averiar, no perderé mi trabajo

Y los clientes, ¿que sistema operativo usan?, y la verdad es que me da igual, eso deben decidirlo ellos mismos, yo instalaré mi aplicación y les daré soporte sobre mis productos. El resto, es un problema, pero no para mi.

Open your mind, be cloud !!!

PDF    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Un problema menos