Constantes de Windows

Ahora que estoy enfrascado en hacer un artículo de cómo llamar a las dlls de Windows desde Velneo V7 usando el objeto librería externa, me surge la necesidad de mirar una y otra vez cual es el valor de las constantes que usa Windows en las llamadas a las dlls.
Así que las he buscado y aquí tenemos la lista casi completa. Si falta alguna no dudes en añadirla.

Seguir leyendo

Anuncios

Nueva versión Velneo 7.2

Ayer martes aparecía la nueva versión de Velneo, la 7.2, con numerosas novedades.

Aquí puedes ver una presentación y un video con las novedades. Además puedes ver un listado completo de las novedades y bugs solucionados.

Además se abre el primer concurso de Open Apps para Velneo V7. Apúntate y muestra lo que puedes hacer con Velneo V7.

Espero que disfrutes tanto de esta nueva versión como lo estoy haciendo yo.

Desarrollar para Mac

Ahora que está tan de moda Apple, y sus Mac, ha llegado el momento de encontrar una herramienta sencilla para desarrollar para ese S.O. La recién aparecida versión de Velneo V7 permite la edición y ejecución de aplicaciones tanto en Windows, Linux y Mac sin variar una sólo línea de código.

Ya no tienes excusa para desarrollar aplicaciones de gestión o de cualquier otro tipo para este sistema operativo.

Ya está aquí: Velneo V7

Recientemente ha salido a la luz la primera versión de Velneo V7. Después de un período en fase beta, sale la primera versión pública de esta plataforma de desarrollo.

Esta nueva plataforma permite el desarrollo rápido de aplicaciones utilizando una base de datos propietaria y un lenguaje visual de alto nivel. En esta primera versión sólo se ha sacado la versión de la nube (on the cloud), y confirman que para Junio dispondrán de solución para desarrollo y ejecución en local (on the LAN).

Incorpora varias características la mar de interesantes:

  • Es multiplataforma. Tango la edición como la ejecución puede realizarse en Windows, Linux y Mac, sin tener que tocar una sola línea de código ni librerías ni cosas raras. En ejecución utiliza un runtime para ejecutar las aplicaciones. Si, se lo que estás pensando… “un runtime… no me gusta”, pero no lo es también Java, Adobe Air o Microsoft Silverlight?. Esto se hace posible porque hacen uso de las famosas librerías Qt adquiridas recientemente por Nokia.
  • Funciona tanto on the cloud como en local: El mismo desarrollo sirve tanto para su ejecución en la nube como para la ejecución en local. Esto es una ventaja competitiva sobre otros sistemas de desarrollo en la nube (tienes más info en http://www.saasmania.com/2009/02/24/como-acertar-en-la-eleccion-de-una-paas/)
  • Introduce el concepto de herencia: La herencia guarda una similitud con las librerías que se utilizan en otros lenguajes tipo Java o Delphi, pero van un paso más allá. Por ejemplo, podemos tener 3 o 4 aplicaciones finales que heredan de una misma caja y poder cambiar la funcionalidad o el aspecto de todas las aplicaciones sólo tocando la caja padre. Os recomiendo la lectura de este documento
  • Añade el concepto de instancia de una aplicación. Podemos tener el mismo “código fuente” final y crear tantas instancias de esa aplicación como queramos. Es un concepto similar al término de moda en la nube: multitenancy. Más info en wikipedia o en saasmania.
  • Es multi-idioma: Desarrollamos una sóla vez y directamente con la herramienta de desarrollo o utilizando la herramienta externa Velneo vTranslator V7, podemos traducir toda nuestra aplicación fácilmente.

La he probado y aunque tengo que reconocer que le falta un poco de madurez sinceramente se convierte en un serio candidato a ser una herramienta revolucionaria en la creación de aplicaciones.

Velneo, dll’s y cadenas

Cuando trabajamos con Velneo y necesitamos hacer una llamada a una dll que retorna una cadena (string) nos encontramos con la tesitura de como liberar el espacio de memoria alojada para la cadena en cuestión en la dll. Veamos un método, que no el único, para liberar esa memoria. Este método sólo va a servir para las dlls que creemos nosotros, ya que debemos añadir un par de funciones extra.

El escenario

Veamos el escenario que vamos a utilizar para poner en funcionamiento nuestra técnica. Tenemos un mapa en Velneo desde el que necesitamos llamar a una función de una dll que debe retornar una cadena de caracteres (un char*). La cadena no tiene una longitud fija, por lo que nos interesa alojar el espacio en memoria en la propia función de la dll y retornar la cadena completa.

La solución

Lo primero que se nos ocurre es hacer una función que retorne un char* y recogerlo en Velneo, pero tenemos que ser conscientes de que ese espacio en memoria no se a a liberar, por lo que estamos dejando un motón de basura.

Lo que vamos a hacer es retornar el puntero a ese char*, y nos creamos dos funciones extra en la dll, getString y freeString. El código en C sería algo así:
unsigned long test(int variables, ...)
{
char* cadena = (char *) malloc(1024);
// Procesamos la cadena y retornamos su direccion de memoria
return (unsigned long)cadena;
}


char* getString(unsigned long address)
{ // Retornamos el contenido de esa dirección
return (char*) address;
}


void freeString(unsigned long address)
{ // Liberamos esa dirección de memoria
free((void *)address);
}

Desde Velneo haremos las llamadas en el siguiente orden:

Set ptr_cadena, testDll.test('variables')
// En esta variable local tenemos la direccion de memoria. Obtengamos el contenido
Set cadena, testDll.getString('ptr_cadena')
// Liberemos ese espacio reservado
Set void, testDll.freeString('ptr_cadena')

Con esta sencilla artimaña nos aseguramos de que no quede espacio en memoria ocupada sin liberar.

Esta es la opción que yo utilizo. Si usas algún otro truco, aprovecha para compartirlo con la comunidad escribiendo un comentario.

Mantener una aplicación en producción y no morir en el intento

Al hilo de lo que comentaba en mi anterior post sobre mis experiencias en mi antiguo trabajo con Java y MySQL, os cuento la parte relativa al mantenimiento de la aplicación en producción.

Aplicación en producción

Los que nos dedicamos al desarrollo de software conocemos las dificultades que implica mantener una aplicación que ya está en producción, o sea, el clientes ya está trabajando con ella.

Si sólo se trata de una actualización a nivel visual o de código no es significativo. El problema viene cuando cambia la estructura de la base de datos.

En otros entornos

Cuando la actualización de una aplicación incluye cambios en la estructura de datos normalmente recurrimos a scripts SQL que se encargan de realizar el cambio estructural y de algunos procesos si tuviéramos que realizar alguna actualización a nivel de datos.

Esto, queramos o no, es un proceso manual, aunque nos podamos ayudar de herramientas que permitan la sincronización entre dos bases de datos.

En Velneo

Afortunadamente los que desarrollamos con Velneo estamos de enhorabuena y la plataforma de desarrollo se encarga automáticamente de realizar la actualización/conversión de la base de datos antigua a la nueva versión. Además crea copia de seguridad de todas las tablas que “sufren” cambios.

Y cuando hablo de conversión me refiero a que si p.e. he cambiado el tipo de un dato en una tabla Velneo se encarga de realizar la conversión (siempre que sea posible).

De verdad que os animo a que probéis esta herramienta de desarrollo porque vale la pena.

Hasta el próximo artículo!!

ORM: ¿Novedad?

Hará de esto un año quizás cuando inicié mi andadura en una nueva empresa. La idea era hacer aplicaciones web trabajando con Java y MySQL y en medio usar un ORM (mapeo objeto/relación), en concreto Hibernate.

Yo, como buen empleado, comencé a leer todo lo que pude sobre aquel, decían, maravilloso sistema que te permitía acceder a los campos y relaciones de una tabla de una forma sencilla.

Comenzó la locura

Estos sistemas funcionan casi todos con ficheros descriptores XML o anotaciones en el código que define las clases de los objetos. Es verdad que existen aplicaciones/plugins que permiten a partir de una base de datos ya creada obtener los descriptores y las clases y viceversa, pero el mantenimiento de todos estas capas es realmente tedioso. Yo en concreto usaba MyEclipse junto con un plugin para Hibernate que venía en ese paquete.

Realmente antes de hacerlo a mano se agradecía que hubiera un sistema semiautomático de “sincronización” entre los cambios que se realizaban en los descriptores, las clases y las propias tablas en la base de datos.

Esto es la pólvora

Los compañeros que trabajaban conmigo ya llevaban más tiempo usando estas herramientas que yo y desafortunadamente para ellos no conocían Velneo. Yo ya tenía algo más de experiencia en esta plataforma de desarrollo.

Bueno, al grano. Mis compis decían: mira que guay, estoy en una factura y a través de una propiedad de la clase factura puedo acceder al cliente y a sus datos. También si estoy en un cliente determinado, a través de una propiedad puedo acceder a la lista de facturas de ese cliente. ¿No es alucinante?, decían. Yo los miraba incrédulos. “De verdad os parece alucinante, pero si eso Velneo lo hace de toda la vida y mucho más transparente e integrado”. Velneo, ¿eso que es?, me comentaban.

Que grande es Velneo

Cuando se creó el modelo de bases de datos relacional no se tenía en mente usarlo con entornos de desarrollo que usaran objetos. Este fué uno de los motivos de que sacaran el ORM, para intentar suavizar el salto abismal que existe entre el trabajo a nivel de clases y relaciones entre tablas.

Lo curioso de todo esto es que Velneo con su modelo de datos real integrado todo esto lo tiene más que resuelto, e incluso mucho más:

  • En las relaciones 1:n automáticamente disponemos de un enlace para acceder desde el detalle al maestro y una instrucción de proceso para acceder desde el maestro a su detalle (en Velneo se conoce como maestro-histórico). Además, en tiempo de ejecución, también puede hacer uso de estos “navegantes” para moverse por los datos.
  • Disponemos de índices especiales que permiten tener un enlace a un determinado elemento del detalle. Todo esto visualmente y sin tener que escribir una sola línea de código. Por ejemplo: desde el cliente podemos tener un enlace a su última factura. Esto permite por ejemplo que aparezca en el formulario de clientes la fecha de la última factura (#UltimaFactura.Fecha#). Insisto en que todo esto es visual.
  • A medida que vamos creando las relaciones entre las distintas tablas la navegación entre ellas si que es realmente alucinante. Por ejemplo si estamos en una factura determinado accediendo al campo #Cliente.DireccionPrincipal.Telefono1# obtenemos el telefono1 de la entidad. Darse cuenta de que estamos en la tabla facturas que tiene un maestro de clientes y éste un histórico de direcciones.
  • Si a todo esto le unimos las actualizaciones y actualizaciones en cascada contamos con un modelo real (de verdad) de datos.

Conclusión

Cuando les conté todo esto a mis antiguos compis quedaron flipados y alucinados de verdad. Cuando se enteraron que la plataforma es española su asombro fue aún mayor. Y cuando por último les mostré lo fácil que es mantener una aplicación en Velneo entonces lo tuvieron realmente claro. Pero este será tema de otro post.