25
Feb
09

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.

25
Feb
09

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.

21
Abr
08

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.

08
Abr
08

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!!

02
Feb
08

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.

31
Ene
08

Velneo backup

Todos sabemos lo importante que es disponer de una copia de seguridad de nuestros datos. En Velneo esa tarea se simplifica al máximo con la utilidad de copias de seguridad que incorpora el vServer.

Para quién no lo sepa, el vServer dispone de la posibilidad de realizar respaldos de seguridad en caliente, esto es, con la aplicación iniciada e incluso con los usuarios trabajando en la aplicación. Pero hay que tener en cuenta algunos aspectos:

  1. La recuperación de una copia de seguridad se tiene que realizar con la misma versión del mapa con la que se hizo la copia.
  2. La utilidad de copia de seguridad no copia el mapa, por lo que tenemos que preocuparnos de guardar el mapa con el que se hizo la copia.
  3. La utilidad guarda los datos de la aplicación. Tenemos que utilizar otra herramienta si queremos guardar los archivos donde se guarda la configuración del servidor (aplicaciones, usuarios, grupos, etc). Estos son los conocidos ficheros vuf.

Estrategia de copia

Por lo tanto para hacer una copia completa de todos nuestros datos tenemos que:

  1. Programar una tarea de copia de seguridad del mapa que nos interesa. Esta utilidad genera un fichero con extensión .vcs y el nombre del mapa.
  2. Mediante una tarea programada de Windows o forma similar crear una copia del mapa y de los ficheros .vuf de configuración del servidor (estos ficheros se encuentran en el directorio donde está instalado el vServer, normalmente “c:\archivos de programa\Velneo\vServer”.

Una estrategia sencilla de copias es lanzar una tarea cada semana o cada dos días sobreescribiendo la anterior.

Una estrategia mucho más completa es hacer copias todos los días y guardar cada día en una carpeta (lunes, martes, miércoles, etc), por lo que conservaremos copias de una semana completa.

Espero que esto os ayude a mantener los datos a buen recaudo.

23
Oct
07

Otro jugador en la lucha por las bases de datos. Velneo, SQL Server y Oracle

Los que programamos en Velneo estamos de enhorabuena. Se acaba de publicar un artículo sobre una comparativa entre 3 grandes bases de datos llevada a cabo por la Universidad de Vigo. Los que llevamos tiempo en este mundo de la programación no nos sorprenden los resultados. Sabemos que Velneo es el mejor en su segmento y para lo que está hecho lo hace muy bien.

Podeís ver más información en este enlace
http://win-vista.es/360/velneo-es-mas-rapido-que-microsoft-y-oracle/

Desde aquí animo a todos los que no lo hayan probado a probar esta maravillosa herramienta.

Web de Velneo| www.velneo.es

Benchmarking | http://benchmarking.oracle.sqlserver.velneo.com/

Informe de la universidad de Vigo | http://aisa.ei.uvigo.es/BENCH/

15
Ago
07

Las comparaciones son odiosas

No, no vamos a comparar a Velneo con otras herramientas. En este artículo vamos a comentar los operadores de comparación que tiene Velneo:

  • Igual a: =
  • Distinto de: !
  • Mayor que: >
  • Menor que: <

Lo primero que echamos en falta son los operadores Menor igual y Mayor igual. Efectivamente estos dos operadores no son incluidos en Velneo, pero ¿eso es un problema? Vamos a ver que no.

Lógica inversa

Supongamos que tenemos un if donde queremos comparar si una variable es mayor o igual que cero. La lógica nos dice que si queremos que sea mayor o igual que cero es lo mismo que “no sea menor que cero”. Eso es lo que se conoce como lógica inversa. Podemos ver otro ejemplo en el foro de Velneo.

Ejemplo

No lo veo claro

Cuando anidamos varios comparadores puede llegar a liar tanta lógica inversa en la misma operación. Una solución es crearnos nuestras propias funciones para representar los operadores de Menor igual y Mayor igual.

Menor o igual Mayor o igual

De esta manera el ejemplo anterior quedaría así:

Ejemplo

Precedencia de operadores

Cuando utilizamos los operadores lógicos AND (&) y OR (|), hay que tener en cuenta lo que se conoce como precedencia de operadores. En Velneo, los operadores se evalúan de izquierda a derecha y hay que hacer uso en muchas ocasiones de los paréntesis.

Por ejemplo, si queremos construir una expresión que evalúe si a es menor que 2 y b es menor que 6, haríamos:

‘a’ < 2 & ‘b’ <6

La precedencia de operadores hace que se evalúe cada operador de izquierda a derecha a medida que se encuentran, esto es, primero el menor, después el Y lógico y por último otro menor. O sea, no está bien construida la expresión.
Para que funcione tendríamos que utilizar los paréntesis de tal manera que lo que está entre paréntesis se evalúe como un todo:

(’a’ < 2) & (’b’ < 6)

Y podríamos hacerlo mucho más complicado, haciendo uso intensivo de los paréntesis:

( (’a’ < ‘b’) & (’b’ < ‘c’) ) | (’b’ < ‘d’)

05
Ago
07

Casting en Velneo

Como comenté en el artículo “null, ese gran desconocido, Velneo hereda características de la herramienta que se usa para su desarrollo, el lenguaje C.

Otra de esas características heredadas es el casting implícito entre distintos tipos de variables. Para ilustrar que significa esto veamos un ejemplo:

Ejemplo

Al ejecutar este código esperaríamos que el mensaje por pantalla fuera “4 facturas”, pero de forma sorprendente o no, la salida por pantalla es “4″.

¿Por qué sucede esto?

Casting implícito

En Velneo tenemos tipos de datos como en cualquier otro lenguaje: int, float, string, pero con la salvedad de que no tenemos que declararlos de forma explícita.

Por ello cuando realizamos operaciones con los datos Velneo utiliza el casting implícito para hacer las conversiones entre tipos de datos. El casting implícito se explica de forma breve en este artículo.

El casting implícito evita al desarrollador, en muchos casos, preocuparse por funciones de conversión entre tipos, aunque también implica estar más atento a las comparaciones y las operaciones entre datos.

Ejemplo

Supongamos que tenemos una cadena que representa un entero y queremos sumarle otro entero.

ejemplo

El resultado del código anterior es “43″. ¿Por qué? Velneo, ante la concatenación de datos, realiza un casting implícito en función al tipo de dato del primer componente de la concatenación, en este caso una cadena, o sea, antes de realizar la concatenación convierte el resto de los componentes a string.

¿Entonces como lo hacemos?

Pues tenemos varias opciones:

  1. Utilizamos la función fValor, que tal como dice la ayuda de Velneo Convierte una cadena alfabética en su valor numérico, haríamos Mensaje -> ‘a’ + fValor( ‘b’)
  2. Forzamos a que el primer componente sea del tipo que nos interesa. Hacemos Mensaje -> ‘b’ + ‘a’

Truco

Y el primer ejemplo, ¿cómo lo podemos resolver?. Una astucia a utilizar cuando usamos la función Mensaje, es siempre hacer que el parámetro se inicie con una cadena, en nuestro caso haríamos Mensaje -> “” + ‘a’ + ‘b’ y el resultado es el esperado: “4 facturas”.

05
Ago
07

Null, ese gran desconocido

Como todos saben y si no se los cuento, la plataforma Velneo está internamente desarrollada en el lenguaje de programación C, y como es lógico hereda alguna de sus características. Una de ellas es el valor null. En Velneo se conoce como “campo vacío”.

Básicamente consiste en que una variable, local o global, o el valor de un campo de una tabla puede estar vacío, o sea, no tener valor.

¿Y esto que significa?, veamos un ejemplo para comprenderlo.

Ejemplo valor null

A primera vista podríamos pensar que la variable a y la variable null son lo mismo, al fin y al cabo su contenido “no tiene nada”. Pues no, este código entra por el else. Ahí es donde entra el concepto de valor vacío.

Por lo tanto, debemos tener en cuenta que a la hora de realizar comparaciones dentro de un if, por ejemplo, con una cadena vacía (como el código de ejemplo anterior), tenemos tres posibilidades: que no sea “”, que sea “” o que sea vacío, tal como se puede apreciar en el siguiente código.

Hay contenido

fCampoVacío

¿Como hacemos en Velneo para saber si un valor es vacío? Disponemos de la función fCampoVacio que nos devuelve un 1 si el dato pasado por parámetro es vacío.

fCampoVacio

Conclusión

Espero que con esta pequeña explicación evitemos algún quebradero de cabeza sobre todo a los que se inician en esta maravillosa herramienta.




Suscripciones y enlaces

 

Julio 2009
L M X J V S D
« Feb    
 12345
6789101112
13141516171819
20212223242526
2728293031  

a