sábado, 27 de octubre de 2007

vAccessForm

Hace poco surgió en el foro de Velneo una cuestión: "Cómo puedo poner en un formulario de edición de fichas los típicos botones de Access para ir a la primera y última ficha?"

Al principio me extrañó ya que en Velneo hay una y mil formas más eficaces de navegar por los registros de una tabla que con los botoncitos de Access.

En Velneo puede haber muchos primeros o últimos o anteriores o posteriores; por qué índices quieres que calcule el anterior?, la anterior factura del mismo cliente?, la siguiente factura más cara?, la anterior por fecha? o la siguiente por el segundo apellido del cliente?.

Pero luego me dije, y por qué no?, aunque sea por puro divertimento Velneano vamos a hacerlo.

Empecé a garabatear las diferentes posibilidades; por proceso, por puntero singular de plural, por puntero a hermano...

Defensor como soy de lo simple decidí que no debía ser por proceso y que la solución debería estar integrada en la parte de la bd. Lo comenté con Agustín e hicimos las primeras pruebas pero ocurrió lo de siempre, procesos...

Publicamos dos soluciones no óptimas en el foro y la maestría, buen hacer, serenidad y sencillez de Paco vino a despejar el campo.

En unos 2,5 segundos había pillado la idea, el mapa, lo modificó, lo dejó funcionando y lo dejó de vuelta en el foro, acompañado de unas sabias palabras:

La respuesta no esta 'ahí afuera', la respuesta está en los índices

Sé que me puedo poner pesado pero no me voy a cansar de repetirlo una y otra vez; estructura, relaciones, índices, triggers, ahí está la solución a todos nuestros problemas. Si hay algo que no haces ahí pregúntate por qué?; no sabes hacerlo? o no se te había ocurrido? o no puedes realmente?

Siempre que se pueda hacer en las tablas, ahí se debe hacer. Así independizas la funcionalidad de la apariencia.

No soy amigo de los procesos en formularios. No me gustan los procesos en pérdida o ganancia de foco, prefiero no usar procesos a la apertura o creación de un formulario, o procesos previos al aceptar, para hacer según qué cosas.

Cuando los uso tiendo a pensar que o mi estructura de bd no es óptima o no he exprimido a fondo la parte de definición de la bd.

Después del rollo filosófico vamos al grano y veamos cómo hacer una relación puntero a hermano que desde cualquier registro de una tabla nos lleve al primero o al último.

Lo primero es la estructura de la tabla.


Vemos que es una tabla cualquiera con los punteros a hermano anterior y siguiente que te crea Velneo cuando le dices Campos - Crear puntero a hermano,


tenemos un campo Extremo que es un booleano que dice si el registro es un extremo de la tabla, con contenido inicial a Sí,

y un proceso Anterior a un alta de ficha que fija el contenido de Extremo a Sí sólo para los extremos reales.


Además tenemos dos campos puntero a hermano más; Primero y Último.

Vemos que los punteros Primero y Último usan para su resolución el índice Extremo, y ese es el fundamento de toda esta historia; el índice.

Cómo es ese índice Extremo?

Es un índice acepta repetidas sobre el campo Código condicionado a que el booleano Extremo sea Sí.

Qué hace este índice? Como al dar de alta un registro el trigger vuelve a fijar los extremos sólo a Sí, la condición de indexación de este índice hace que cualquier registro de la tabla sólo tenga un hermano anterior extremo y sólo uno posterior extremo, así la resolución del puntero a hermano anterior y posterior por este índice nos lleva de forma directa al primer y último registro de la tabla respectívamente.


Simple y sencillo como Velneo.

Life is Soft!

martes, 23 de octubre de 2007

Benchmarking Velneo, Oracle, SQL


Desde siempre hemos estado alabando las bondades de Velneo como base de datos y hemos dicho lo rapidísimo que es, pero no había nada publicado oficialmente al respecto.

Hoy la cosa cambia; ya es público, ya es oficial, ya es imparcial.

La Universidad de Vigo ha realizado una comparativa de rapidez y rendimiento entre Velneo, Oracle y SQL, donde se revela que VELNEO ES MÁS RÁPIDO que los dos grandes del sector de las bases de datos.

El informe entero se puede consultar aquí.

Y un resumen del mismo aquí.

Quizás lo que más pueda sorprender son las cifras, 37.8 veces más rápido que SQL y 6.59 veces más rápido que Oracle.

Todos sabíamos que Velneo es rápido, pero TANTO!!!

Pues bien, este benckmark ha sido realizado por una entidad ajena a Velneo e imparcial; el Departamento de Ingeniería de Sistemas y Automática de la Escuela Técnica Superior de Ingeniería Informática de la Universidad de Vigo, y arroja esas cifras.

Las pruebas han sido exhaustivas sobre tablas de diferentes tamaños ( 100, 1.000, 10.000, 100.000 registros ), en altas y búsquedas indexadas y no indexadas, y Velneo ha quedado la inmensa mayoría de las veces en primera posición.

A partir de ahora quizás cambie la frase final "Life is soft!!" por la de

"Life is Speeeed!!!"

domingo, 21 de octubre de 2007

vConversaciones

Anoche, entre risa y risa mantuve esta conversación con otro vDesarrollador.

La transcribo tal cual surgió.

Tómese en consideración que era Viernes y más de las once de la noche.

Él: el wiki se me atraganta, no veo los logos
andetan
??
andeloshasmetío?
Él: ya los encontré
Yo: he creado una página
para que se vean todos juntos
Él: hola
ya los he visto, ya
Yo: hola
Él: es que el wiki me sienta como un tiro
ja ja
Yo: pues estoy por tomarme uno, sabes
Él: me encanta
cuánto entusiasmo, cuanta energía
Yo: vaya actividad
Él: estreñido?
o un wiki con hielo, pal cuerpo
Yo: no, uno de los otros
on the rocks
Él: on the rocks
ja ja
a la vez
Yo: ya no se por donde retomar los hilos
hay tanto
Él: no te preocupes
voy a preparar una especie de resumen
Yo: pos menos mal
Él: Pero mañana eh?
que hoy hay que descansar
Yo: eso espero
Él: por cierto, qué bueno lo del google
eres cojonudo, tío
flipé
Yo: ya te sale?
Él: vamos que yo no llego a eso ni en dos años
hoy no he podido ni tocarlo
pero mañana, más fresco, me pongo
Yo: el xml que hay que generar para los iconos es sencillo
Él: y si tengo dudas ya sé a quién llamar
lo vi
lo de los iconos
es guay
Yo: pues ya ves que no tiene gran misterio
Él: pero es como todo, hay que saber
Yo: las grandes cosas están hechas de piezas pequeñas
Él: ese es el verdadero y mayor misterio, saber
Yo: pequeñas y sencillas
Él: o tener el teléfono del que lo sabe
ja ja
sencillez
Yo: ja ja
Él: la navaja de Ockan, no?
Yo: sir
ante varias, la mas simple
Él: siempre
o en su variante más "bestiaparda": ante la duda, la más tetuda
Yo: ja ja ja
chico, como hoy estaba saturado
he dibujado
los logos
Él: lo he visto
Yo: y me he entretenido con un mapa
Él: me gusta el de los círculos
Yo: experimental
Él: casi como yo.
Yo: je je
yo ya tengo el día copado
Él: con los niños supongo
Yo: con parejas con nanos
una pareja a comer
otra a cenar
mañana con mis padres y mi hermano
es que he estado fuera de valencia mucho tiempo
muchos fines de semana quiero decir
Él: ya
pues a descansar
Yo: oye, una cosa,
Él: dime
Yo: tú que eres el teórico del grupo
Él: gromeauering sólo
Yo: ja ja ja
bueno sigo
Él: venga, dale
Yo: qué te parece un puntero a hermano que te lleve a la primera y a la última ficha de una lista?
Él: Bien
supongo que esto viene
Yo: vAccess
Él: por unos mensajes en el foro
sobre ese tema
ya access
Yo: "un proceso que tal y cual..."
es el ejemplo perfecto para mandar al traste a los procesos
y hacerlo por punteros a hermano
es el mapa con el que estaba experimentando
me lo he mandado a casa a ver si lo pulo y funciona
y lo usamos para un artículo
Él: bien
pero no perderemos agilidad
??
Yo: agilidad
Él: los punteros a hermano no son plato de mi gusto
Yo: ??
oh
no lo sabía
Él: lo que pueda retardar el cálculo del hermano contiguo
espera
quiero decir,
a la hora de trabajar con ellos pueden ser muy útiles y potentes
pero por ejemplo con las actualizaciones a hermano contiguo, en algunos casos te puedes morir
Yo: ya
Él: si no se dan las actualizaciones, nada
sin problema
lo que no acabo de ver es la utilidad, quitando el aspecto de investigación
o es que yo estoy ahora espeso
que será lo más seguro.
Yo: la utilidad es nula; demostar que se pueden hacer las cosas en la parte de la bd
Él: ah, bien
vale
que es un ejercicio teórico
mola
Yo: claror
tú te lo habías planteado?
lo tienes resuelto sin utilizar procesos?
Él: bien
nos metemos en discusiones filosóficas y eso me gusta
no
pero ya me has jodido el sueño
seguro
no
Yo: ja ja ja
Él: no lo tengo resuelto
lo primero
Yo: otra posibilidad es hacerlo por singular de plural
Él: tengo que escoger el índice
Yo: ahí está el kid de la cuestión
qué indices te montas para ir al primero y al último?
Él: ya ya
Yo: desde cualquier otro registro
Él: tic tac tic tac
Yo: ja ja ja
BUENAS NOCHES
Él: eh!
no me dejes así
que era el reloj del un dos tres
Yo: uy, qué tarde se está haciendo
Él: esperando la respuesta
que no me duermo
serás mariconazo
Yo: pues no lo se
pero lo estoy intentando
Él: ja ja
Yo: con un booleano
Él: ja ja
booleano eh?
Yo: "Soy el primero?", "Soy el último?"
Él: pero siempre implicaría un trigger o un proceso en la modificación , alta o baja de una ficha de la tabla
Yo: claro
así lo tengo
y además
en la edición de la ficha
soy el primero sólo debería serlo el primero
Él: si me permites una sugerencia
Yo: dimerl
Él: y si en vez de soy el primero soy el último, que serían dos booleaos no?
Yo: si
Él: usas un sólo booleano
Yo: "No soy el primero ni el último?"
Él: 1=soy extremo 0= soy del medio
Yo: eso
a ver...
pues creo que sí
además con sólo un índice
Él: por eso lo decía
sólo tienes dos estados posbles para un registro
ser del montón o ser extremo ( como mola esta jerga tan cañera, esto es i+d extremo no?)
Yo: ja ja
Él: ja ja
Yo: pero para que funcione el puntero a hermano
deben compartir
una parte del índice
es decir
Él: ya
Yo: que en la edición de la ficha de un registro
este debe pasar a ser extremo si no lo es
y luego volver a su estado correcto
Él: eso
Yo: sólo para que funcionen los punteros
Él: completamente de acuerdo
Yo: ok
pues ya puedo dormir tranquilo
Él: compartiría momentaneamente el ser extremo
Yo: y con sólo un booleano!!!
Él: esto es casi como la física cuántica
Yo: para ir al extremo anterior
o al posterior
Él: hacemos saltar el spin por menos de un pito
Yo: yo no se cuantos quantos emito en cada salto, pero tela
Él: claro
editas, si no es extremo cambias el booleano a 1 y pasa momenaneamente al estado extremo para poder moverse a los extremos anterior o posterior
Yo: oye, y hablando de física cuántica
Él: dime
Yo: sabes qué ruido hacen dos electrones al chocar?
Él: ( si alguien nos está espiado este chat van a pensar que estamos locos )
Yo: PLANCK!!!!!!
Él: ja ja
ja ja ja
Yo: ja j aja ja
Él: ja ja ja
muy bueno
Yo: ya mestoy rayando
Él: en una fiesta de funciones matemáticas, está e^x en un rincón aburrida
se le acerca otra función y le dice , "chica, no estés ahi sola, júntate con las demás, intégrate"
Y responde e^x " que más dá, no voy a cambiar"
Yo: JUA JUA JUA JUA
Él: es malo
no exageres

Pues eso, cierto como la vida misma.

Y luego dicen que los del Velneo somos "RAROS".

Life is soft!!!

lunes, 8 de octubre de 2007

vCenter en 3D

Tal como prometí en esta entrada anterior, he publicado en 3D Wharehouse el vCenter en 3D para que lo podáis disfrutar al navegar con GoogleEarth.


( Descarga aquí )

Ahora es más fácil sentir que Velneo realmente existe.

Mi pretensión es ir publicando los edificios edificios emblemáticos Velneo y este es el primero; la sede comercial de Velneo.

Este edificio lo conocía de primera mano tras la visita que realizamos varios vDesarrolladores hace tiempo para la grabación de unos vídeos sobre Velneo, y Nico me ha ayudado de forma muy generosa al mandarme unas fotografías de la maqueta del edificio, ya que en la web no encontré demasiado material técnico para realizarlo en 3D.

Ahora el siguiente reto, el siguiente edificio emblemático sin duda debe ser la sede donde los desarrolladores de Velneo, Juan (Arquitecto) y su equipo, están dándole forma a la herramienta que dominará el mundo del desarrollo de software de gestión durante los próximos 10 años; la V7.

Life is soft!

jueves, 4 de octubre de 2007

Singular de Plural ( i )

Hola de nuevo a todos.

Esta vez vamos a intentar arrojar algo de luz a unos punteros poco conocidos y por ello poco usados en Velneo, pero básicos a la hora de plantear nuestras bases de datos y ahorrarnos así muchas líneas de proceso en la parte derecha del mapa; los punteros singular de plural.

Hay dos tipos de punteros singular de plural; singular de plural por posición y singular de plural por índice.

Antes de entrar a fondo en los entresijos de este tipo de punteros veamos el concepto singular de plural.

Singular de plural tiene sentido dentro de una relación uno a muchos. Una relación de este tipo la encontraremos entre una tabla maestra y una submaestra suya, o entre una tabla maestra y otra tabla maestra con un puntero a maestro que apunte a la primera.


Para entender este tipo de relaciones el recurso más fácil, que yo sigo empleando a pesar de los años, es lo que dicen todos los manuales de Velneo:

  1. Plantea las dos frases posibles: las Facturas de un Cliente o los Clientes de una Factura.
  2. La frase cierta es la que nos dice qué tabla es maestra y cual es submaestra o maestra con puntero a maestro.

En el sencillo ejemplo que hemos empleado la frase cierta puede ser las Facturas de un Cliente, lo cual nos dice que Clientes es la tabla maestra y Facturas es la tabla submaestra o maestra con un puntero a la tabla maestra Clientes.


Cuando nos encontramos este tipo de relación entre tablas siempre hemos de establecer en la segunda tabla un índice acepta repetidas con el campo puntero a maestro, y así en la maestra podremos definir un histórico sobre la segunda por el índice mencionado.


Si no establecemos ese histórico podemos encontrarnos ciertos problemas posteriores si modificamos (cosa rara) el campo código de la maestra, ya que si no existe el histórico entre la maestra y la submaestra, la herencia de ese código por parte de la submaestra o tabla de segundo nivel puede verse afectada.


Bien, visto esto pasemos a los punteros singular de plural.

Un puntero singular de plural se establece entre una tabla maestra y una submaestra o maestra con puntero a la primera maestra, de forma que desde la primera podamos apuntar a un registro concreto de la segunda.

En el ejemplo sencillo que hemos comentado antes, estableceríamos un puntero desde un Cliente a una de sus muchas Facturas.

A cuál de sus facturas? Eso es lo que vamos a definir en el puntero singular de plural.

Si utilizamos un puntero singular de plural por posición podremos acceder de forma inmediata a la primera Factura de un Cliente, o a la última, símplemente indicando en la fórmula que resuelve el puntero "1" para localizar la primera Factura o la variable del sistema "n" para localizar la última Factura.


Con este tipo de puntero podremos acceder por posición a cualquier registro de la tabla submaestra o maestra con puntero a maestra; al primero, al último, al segundo, tercero, al penúltimo, al que se encuentre más cercano a la mitad de la lista, etc, símplemente indicando la fórmula para localizarlo en la resolución del puntero.


Ahora bien, en muchos casos la localización de ese registro concreto de la segunda tabla no será tan trivial como en este ejemplo. Puede que queramos localizar la última factura a una fecha concreta, o que supere un determinado importe, por ejemplo.

Para este tipo de localización deberemos usar el otro tipo de puntero singular de plural; por índice.

miércoles, 3 de octubre de 2007

The Boss

Ayer mismo ocurrió una debacle en una de las plataformas de venta de entradas por internet, el artículo completo se puede leer en el periódico El Mundo, aquí.

The Boss
No es la primera vez que ocurre algo parecido, si os acordáis en este artículo ya lo vimos hace mucho tiempo, y al parecer las cosas siguen más o menos igual.

Afortunadamente en reservaentradas.com las cosas siguen funcionando, y creciendo.

Ahora ya somos siete cines.

Life is soft!