viernes, 28 de diciembre de 2007

Noticias del Mundo... Velneo

Vaya esta entrada, en un día como hoy, como homenaje al extinto "Noticias del Mundo", al extraterrestre equipo de Velneo, a la familia de los Increibles (un besito a María), y a Eloisa, infatigable trabajadora ;-DDD

Inocente!!!

P.D.: Aclaratorio para los Velneanos no iniciados.

El extinto periódico "Noticias del Mundo" fue un papiro que allá por los escasos '90 nos alegró a muchos más de una tarde de "peyas" durante nuestros estudios. Aquí se puede encontar alguna referencia y algunos ejemplares en PDF.

Alfonso Gutiérrez lo podeis consultar aquí y hay que ver lo parecida que es la foto de portada con la de la Wikipedia.

La Familia Increible es la de Agustín Sevilla, moderador del foro de Velneo, que con ese disfráz ganó el premio al mejor disfráz de cine del año 2005 en la lne.

Un saludo a todos ellos.

domingo, 16 de diciembre de 2007

La rapidez de Velneo

Hace unos años, cuando me encontraba desarrollando un Sistema de Información Geográfica para el Ayuntamiento de Valencia, tuve la oportunidad de conocer a una empresa de Bilbao que había desarrollado un SIG para esa ciudad.

Me enseñaron el sistema en funcionamiento y era realmente rápido.

El problema en sí era bastante sencillo; cuál es la ruta óptima para ir de un sitio a otro de la ciudad?

Si planteamos los diferentes sitios de la ciudad (paradas de bus y metro) como nodos de una red topológica, y las rutas entre ellos (trazado de las líneas de bus y metro) como enlaces entre los nodos, el camino óptimo para ir de un sitio a otro es algo así como la resolución del típico problema del "Traveling Salesman Problem".


La resolución de este problema implica un algoritmo en cuyo cálculo se invierte bastante tiempo, y la respuesta casi inmediata del sistema de los de Bilbao me extrañaba bastante.

Como había confianza me revelaron el secreto: "No calculamos la ruta óptima para ir de un sitio a otro. Como las posibilidades no son infinitas, las hemos calculado todas y las tenemos almacenadas. Así cuando alguien pide una ruta sólo hemos de buscarla entre las ya calculadas y mostrarla".

Al principio pensé; "Qué brutos!!!", pero bueno, teniendo en cuenta que eran de Bilbao...

Con el tiempo me dí cuenta del acierto de su razonamiento.

Por otra parte estaba enseñando Velneo al que en su día fué responsable de Atari España, excelso programador C, personaje que considero más que cualificado para aportar una opinión relevante sobre la herramienta, y me dijo: "Velneo hace trampa, calcula los índices y los almacena".

Y es cierto, Velneo calcula los índices y los guarda en disco (ficheros .idx) de forma que ya tiene calculadas y almacenadas las respuestas a cualquier posible consulta sobre la base de datos antes de que la formules.

Como los de Bilbao.

Esa es una de las razones que hacen que Velneo sea una de las bases de datos más rápidas del mercado; los índices.

Life is soft!

martes, 11 de diciembre de 2007

La VERDAD

Hace poco surgió una respuesta a un hilo bastante interesante en el blog de Velneo que se dió en llamar "La verdad".

Este hilo ha tenido continuidad tanto en el blog de Velneo como en el de Alfonso Gutiérrez.

Para que no haya dudas acerca de lo que es "La VERDAD" adjunto imagen aclaratoria.


Un saludo,

domingo, 11 de noviembre de 2007

Maestro de mí mismo

Con la inestimable colaboración del maestro Agustín:

Todos hemos usado los punteros a maestro y los punteros a histórico para relacionar al menos dos tablas entre sí.

También en algún momento nos puede surgir la necesidad de tener un histórico con registros que pertenecen a la misma tabla.

Veamos estas dos situaciones reales:

  1. En una aplicación tenemos la tabla ARTICULOS . Hay registros de esta tabla que tienen un histórico también formado por otros artículos. Un ejemplo podría ser el artículo vajilla, formado a su vez por artículos platos llanos, platos hondos
  2. En una sociedad, tenemos una tabla de SOCIOS. Los socios menores de edad dependen de sus tutores a la hora, por ejemplo, de emitir los recibos de cuota social. Hay socios que dependen de otros socios.

Para solventar esta problemática desde la parte izquierda del vDeveloper, podemos acudir a la potencia de los punteros a maestro, de los índices, de los enlaces a histórico y de las actualizaciones.

Analizando el primer caso planteado, artículos formados por otros artículos, tendremos una tabla maestra ARTICULOS.


En dicha tabla hemos incluido, además del capo Nombre, el campo PR-COSTE-CALC, que utilizaremos para mediante actualizaciones acumular el coste del artículo como suma de los costes de sus componentes, el campo PRECIO-COSTES, cuyo contenido inicial es el campo PR-COSTE-CALC por si se quiere modificar el precio de coste y no se quiere usar el calculado, y COMPONENTES que nos servirá para saber el número de componentes que tiene el artículo.

Además incluimos un campo puntero a maestro ARTICULOS–MAESTRO que apunta a la misma tablas de ARTICULOS y que nos servirá para indicar si dicho artículo pertenece a otra ficha de artículo, es decir, si es escandallo de otro artículo pero sin dejar de ser un artículo en sí mismo.

Veamos el campo puntero a maestro ARTICULOS-MAESTRO.


  • Está enlazado a la tabla maestra ARTICULOS y no tiene contenido inicial.
  • Este es el campo que nos indica si un artículo forma parte del escandallo de otro artículo.

Ahora creamos el índice que nos permitirá ordenar dentro de una ficha de artículo, sus componentes.


Este índice lo llamamos Componentes de, y está formado por los campos ARTICULOS-MAESTRO, que es el puntero a la misma tabla, y su campo CODIGO, para que los ordene, dentro de un mismo ARTICULO por su orden de inclusión en el histórico.

Sólo nos queda, crear el enlace a histórico desde la misma tabla de ARTICULOS y utilizar el puntero para las actualizaciones.


El primer componente de la actualización aumenta en 1 cada vez que hacemos que un artículo sea componente de otro, el segundo componente nos calcula el PR-COSTE-CALC, para acumular el precio de coste total.



Forma rápida, sencilla y potente, usando sólo elementos de la estructura y sin tener que hacer ni un proceso, de controlar de forma básica un escandallo.

Life is soft!

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!

viernes, 28 de septiembre de 2007

AutoCad?

El otro día hubo una importante tormenta eléctrica y los condensadores de mi placa base dijeron basta. Afortunadamente fueron los condensadores y lo cosa no pasó a mayores, así que mis discos duros sobrevivieron.

Monté los discos en otro equipo y puedo acceder a todos los datos, pero me quedé sin todo el software instalado.

Uno de los programas que tenía instalado era AutoCad y casualmente necesitaba hacer un diseño mecánico con urgencia.

Podía buscar el cd de instalación y volverlo a instalar, pero en vez de eso me dije: "Pero si tengo el GoogleSketchUp en la web y gratis!!!".

Me lo bajé en el equipo, lo instalé e hice mi diseño en cuatro patadas.


Lo hice directamente en 3D, lo acoté, lo modifiqué y vi que era paramétrico y las cotas dinámicamente se ajustaban a las nuevas dimensiones reales de la pieza. Una gozada.

Un único pero: la precisión. Como mucho puedo trabajar en milímetros, no puedes indicar unidades de trabajo menores, y los mecánicos solemos trabajar hasta con milésimas, pero fue cuestión de ajustar las medidas para cumplir con las holguras y ya está.

Está claro que todavía no es la herramienta ideal para el diseño mecánico, pero tiempo al tiempo.

Y es gratis.

Un saludo.

sábado, 15 de septiembre de 2007

GoogleSketchUp

Al hilo del mapa de vDessarrolladores que empecé en GoogleMaps seguí estudiando alguna de las herramientas que Google está dejando a disposición de la comunidad y me topé con GoogleSketchUp, una herramienta de diseño 3D gratuita, fácil, sencilla e intuitiva.

Despertó en mí la añoranza de viejos tiempos cuando diseñaba con AutoCad y 3DMax, y me llamó mucho la atención el nombre de la herramienta SketchUp.

Quién cuando era pequeñito no ha dibujado con el Telesketch, y lo más fuerte, la primera aplicación de diseño que utilicé en mi por entonces flamante PC Philips fue el AutoSketch, primitivísima versión del AutoCad moderno, que por cierto, aún existe!!!

Me animé a descargar GoogleSketchup y mientras miré unos videotutoriales en Youtube. Al finalizar la descarga me sorprendió la facilidad de uso del programa. En este aspecto se parece mucho a Velneo; te lo descargas y en 10 minutos ya tienes un desarrollo a medias.

Lo más interesante es su conexión con GoogleEarth.

Teniendo GoogleEarth abierto, navegas y seleccionas una vista zenital, en GoogleSketchUp le dices que la importe, y ya puedes empezar a diseñar tu edificio en 3D perfectamente integrado con el mundo virtual de GoogleEarth.

La forma más sencilla de hacer un edificio es disponer de fotografías del mismo que se pueden utilizar como textura de una "caja" que se amolde a la forma del mismo. Yo, como no disponía de fotografías del mío, pues lo hice a ojo y sin texturizar, sólo utilizado colores.

Aquí está la primera prueba que hice, descargable en 3DWareHouse.


3DWareHouse es el sitio de Google donde puedes subir tus creaciones 3D de SketchUp para compartir con la comunidad.

La idea a partir de ahora es hacer los edificios emblemáticos Velneo y subirlos, para que así toda la comunidad pueda disponer de ellos al navegar con GoogleEarth y sentir que Velneo realmente existe.

Life is soft!

miércoles, 12 de septiembre de 2007

Buscador web

Una de las herramientas imprescindibles hoy en día en cualquier web es un buscador sobre los contenidos de la propia web, algo así como un Google pero restringido a los contenidos de nuestra propia web.


Para ello vamos a necesitar varias cosas:

  1. Un gestor de contenidos de nuestra web, es decir, que el contenido de la web se extraiga de tablas. Si por ejemplo nuestra web es el catálogo de productos de nuestra empresa, lo primero es tener en bd la estructura de fichas de productos.
  2. Una variable global accesible web, llamémosla $TXT-BUSQUEDA$, que contendrá el texto a buscar en los contenidos.
  3. Un formulario web para que el usuario introduzca la cadena a buscar.
  4. Uno o varios índices sobre la tabla de productos para realizar la búsqueda por trozos de palabras, todas las palabras o por alguna de las palabras.
  5. La búsqueda en sí.
  6. Un proceso accesible web que reciba la variable global $TXT-BUSQUEDA$, lance la búsqueda y muestre el html de los resultados.

Vayamos por partes.

El gestor de contenidos de nuestra web lo vamos a reducir a una tabla PRODUCTOS. En esta tabla vamos a tener los siguientes campos: Nombre, Referencia y Descripción, por ejemplo, que son los campos sobre los que haremos que actúe el buscador.


Nombre es el campo Nombre que nos crea Velneo por defecto al crear una tabla nueva junto con sus índices Nombre, Palabras y Trozos. Podemos observar cómo están configurados estos índices para tomarlos como referencia a la hora de montar nuestros propios índices.

Referencia es un campo donde introduciremos un código formado tanto por letras como por números, es decir, la referencia del artículo.

Descripción será un campo alfabético de 500 caracteres de longitud, por ejemplo, donde introduciremos una descripción mucho más amplia sobre el producto en cuestión.

Como vamos a querer buscar sobre los tres campos anteriores a la vez, necesitamos un campo que aglutine el contenido de los tres. Así podemos crear un campo TXT-BUSQUEDA Alfa 40 de longitud 500, lo que nos da un total de 750 caracteres, con contenido inicial la concatenación de los tres campos anteriores en cuestión; "" + %NOMBRE% + " " + %REFERENCIA% + " " + %DESCRIPCION%

Ahora necesitamos, por hacerlo fácil, dos índices: uno para buscar por palabras y otro para buscar por trozos de palabras, es decir, por aproximación alfabética ternaria (pones un mínimo de tres letras y la búsqueda ya responde).

Para ello crearemos un nuevo índice PALABRAS-TEXTO-BUSQUEDA, por ejemplo, que será del tipo Palabras sobre el campo TXT-BUSQUEDA.

El segundo índice será TROZOS-TEXTO-BUSQUEDA, del tipo Aproximación alfabética ternaria sobre el mismo campo TXT-BUSQUEDA.

Con esto ya tenemos la estructura de bd necesaria para poder realizar la búsqueda.

Veamos ahora la búsqueda.


Crearemos un nuevo objeto búsqueda que llamaremos BUSCADOR. Esta búsqueda la vamos a configurar en principio para realizar una búsqueda por palabras, así incluiremos en la misma los índices CODIGO con Modo de búsqueda Todo el fichero, y como segundo índice el PALABRAS-TEXTO-BUSQUEDA en Modo Mezcla Cruzar.

Si como segundo índice de la búsqueda incluimos TROZOS-TEXTO-BUSQUEDA en Modo Mezcla Cruzar habremos configurado la búsqueda para que responda por ternas de caracteres.


En cualquiera de los dos casos, debemos indicar como contenido inicial del segundo índice en la búsqueda el contenido de la variable global $TXT-BUSQUEDA$.

Hago aquí un inciso para comentar las dos posibilidades que tenemos al utilizar el índice por Palabras en la búsqueda.

Si os fijáis a la hora de especificar el segundo índice de la búsqueda tenemos dos posibilidades: Todas las palabras o Alguna de las palabras. Qué quiere decir esto?

Si usamos Todas las palabras, estaremos haciendo una búsqueda tipo "Y"; que aparezca la palabra1 y la palabra2 y la palabra3.


Si en cambio usamos Alguna de las palabras, estaremos haciendo una búsqueda tipo "O"; que aparezca la palabra1 o la palabra2 o la palabra3.


Aclarado esto sigamos con nuestro buscador.


Ahora lo que vamos a necesitar es un formulario web con un campo donde el usuario introduzca la cadena de texto a buscar, y de valor a la variable global $TXT-BUSQUEDA$, y un botón BUSCAR.

Eso es algo tan simple como:

<form action="PROCESA-BUSQUEDA.PRO" method="post" name="busqueda" id="busqueda">
<input name="TXT-BUSQUEDA" id="TXT-BUSQUEDA" size="25" maxlength="150" type="text">
<input value="BUSCAR" type="submit">
<form>


Hay que fijarse en que el campo del formulario donde el usuario escribe la cadena a buscar se llama igual que la variable global $TXT-BUSQUEDA$ que va a contener esa cadena.

Otro detalle es que el botón submit del formulario no tiene nombre.

El action del formulario es el proceso PROCESA-BUSQUEDA.PRO


Este es el proceso accesible web que recibirá dentro de la variable global $TXT-BUSQUEDA$ la cadena a buscar. Dentro del proceso lo único que hemos de hacer es lanzar la búsqueda BUSCADOR, que directamente ya nos devuelve una lista de la tabla PRODUCTOS, donde se habrá encontrado la cadena $TXT-BUSQUEDA$ en alguno de los campos %NOMBRE%, %REFERENCIA% o %DESCRIPCION%.

El cómo mostrar los resultados de la búsqueda ya es cuestión de un componente html perteneciente a la tabla PRODUCTOS, que haciendo uso de las repeticiones <AVPR> muestre la lista de productos encontrados, algo como

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Resultado búsqueda</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<p>Resultado de la búsqueda</p>
<p>Se han encontrado #AVPn Productos con #AVP'cadena-a-buscar'</p>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>NOMBRE</td>
<td>REFERENCIA</td>
<td>DESCRIPCION</td>
</tr>
<AVPR>
<tr>
<td>#AVP%NOMBRE%</td>
<td>#AVP%REFERENCIA%</td>
<td>#AVP%DESCRIPCION%</td>
</tr>
</AVPR>
</table>
</body>
</html>

En este ejemplo hemos visto cómo montar un buscador por palabras lo más sencillo posible.

Como ya hemos adelantado antes, esto se podría complicar más incluyendo campos en el formulario para que el usuario pudiese configurar la búsqueda para que actuase por Trozos de palabras, por Palabras y en modo "Y" u "O", habiendo incluido ambos índices en la búsqueda y condicionandolos en consecuencia, pero esto ya lo veremos otro día.

Life is soft!

lunes, 3 de septiembre de 2007

Servidor parado, servidor trabajando...

Por una de esas casualidades el otro día me dí cuenta de que podemos hacer trabajar al vServer aún teniendolo parado.

En mi casa tengo configurado el servidor para que no se ponga a la escucha al ejecutar el programa, es decir, arranco el servidor pero está parado.


Y en un mapa experimental donde tenía seis tablas; tres con datos y tres vacías, me dió por en el ONINIT-MAPSERVER cargar secuencialmente cada una de las tres tablas por uno de sus índices y ejecutar un tubo de lista entre cada una de las tablas con datos y su respectiva homóloga sin datos. Además, luego apuntaba una serie de punteros entre las tablas recién rellenadas.

Para mi sorpresa, al abrir la aplicación en el servidor parado, este empezó a realizar el trasvase de datos entre las tablas, para finalizar teniendo las tablas llenas y con los punteros creados, todo ello estando el servidor parado.

Puede ser una tontería o puro desconocimiento del funcionamiento de vServer, pero me resultó ciertamente sorprendente y aquí lo comento por si alguno de vosotros le puede ver la utilidad.

Life is soft!

jueves, 9 de agosto de 2007

Mapa vDesarrolladores

Tras ver en el foro de Velneo cómo Adelo había incluido sus coordenadas (latitud, longitud) a su firma, siguiendo quizás la aportación de SimbioticSystem en otro hilo anterior, me decidí a aportar mi granito de arena a la excelente idea y puse en marcha el mapa vDesarrolladores en GoogleMaps.

En este hilo del foro los usuarios que han querido han ido aportando sus coordenadas y yo los he ido geolocalizando y publicando en el mapa que mantengo personalmente.


Es un inicio.

Puede servirnos para generar negocio entre desarrolladores al poder cooperar por cercanía, cedernos clientes si no nos interesan por su ubicación, buscar distribuidores de nuestros productos, hacer reuniones, vQuedadas, etc...

Y de paso vemos por dónde caen esos "locos del Velneo" ;-DDD

Life is soft!

viernes, 29 de junio de 2007

Velneador bluetooth

Esta anotación hace tiempo que se quedó en el tintero y ahora aprovecho para sacarla a la luz.

Tras semanas de investigación y desarrollo, por fin lo puedo lanzar.

Ha llegado el Velneador bluetooth, para aquellos que les cuesta cambiar el chip.



Características:

  • Conexión bluetooth con tu teléfono móvil 3G o con tu ordenador personal, lo que se encuentre más cerca.
  • Router interno inalámbrico con una velocidad superior a la del ADSL convencional.
  • Conexión USB 2.0 para transferencia de archivos map y vam.
  • Conexión permanente con el foro de Velneo. Opción acceso a Velneo Directo y Soporte Velneo.
  • Software de lectura de foro configurable con las voces de Fran o Agustín, a elegir.
  • Applet de búsqueda rápida en vBdC.
  • Incluye reproductor iPod MP4, para disfrutar de los vSeminars en diferido.
  • Disponible con cristales sin graduación o con graduación hasta 20 dioptrías.

Cómpralo ya!!!

Se aceptarán pedidos especiales en colores #8F8F8F y #E30B0B para más de 100 unidades, o si dispones de licencia vGold o Nivel 4.


Que lo disfrutéis!!!

Velneo, otro nivel...

La movida de la última semana con Velneo y los niveles me ha inspirado un fondo de escritorio que aquí dejo para su libre descarga.



Es una especie de doble o triple homenaje ;-DDD

Life is soft!

jueves, 28 de junio de 2007

Los programadores son unos quejicas


Leyendo el blog de Alfonso Gutiérrez enontré esta anotación con la cual me identifico bastante como programador.

Me permito añadir ciertos comentarios sobre dicha cita para adaptarla a lo que está ocurriendo últimamente con el "cambio" de política comercial de Velneo.

Cambio?

El cambio como tal a mí no me ha afectado. Soy suscriptor vSilver con acceso a vPlantillas, vPlugings y vSeminars, tengo soporte web, y soy betatester de V7 con acceso a los seminarios sobre V7 que se van celebrando, y por todo ello pago.

Lo único que ha cambiado es que a partir de ahora me llamarán Velneo Nivel 3, supongo. El nombre en sí no me importa, lo que me importa son los productos y servicios a los que accedo, y estos no han cambiado, y si cambian será a mejor.

Viendo la documentación publicada por Velneo respecto a los niveles entiendo que el "cambio" afecta por igual a todos, es decir, te quedas como estabas o mejoras por poder acceder a más servicios, presentes o futuros a muy corto plazo.

Cualquier suscriptor de la plataforma seguirá pagando su cuota y accediendo a sus productos y servicios, aunque le cambien el nombre.

Respecto a los no suscriptores, no siguen igual sino que mejoran, disponen de un entorno de desarrollo gratuito, las plantillas vBase y vBasics, el vídeo de primeros pasos, y además obtienen acceso a unos impagables seminarios de formación online!!!

Y aún hay no suscriptores que lloran sus penas y se quejan lastimosamente de que la versión gratuita de desarrollo sigue sin tener funciones remotas y objetos protocolo tcp entre otras cosas. Eso sí sería un cambio!!!

Lo quiero todo, lo quiero gratis, lo quiero ya!

Ahora pagando 50 euros una sola vez en la vida obtienes las plantillas vGestion, vTPV, vWeb, vODBC y vGUID, y acceso a soporte técnico web durante ese mes!!!

Esto no tiene precio, bueno sí que lo tiene, pero es ridículo por lo que obtienes a cambio. Y si sigues pagando esa cuota mensual tienes siempre las plantillas actualizadas y sigues teniendo acceso a soporte, y otras cosas que irán surgiendo. Muchos suscriptores hubiesen querido para sí estas condiciones con anterioridad.

Y aún hay gente que se queja.

Los suscriptores de nivel 3 y 4 tienen más plantillas, más soporte y más seminarios, como siempre.

Un tema aparte es el de los vProfesional que la compraron uno, dos o tres días antes del cambio a niveles.

A mí me pasó algo parecido cuando me compré el coche. Me compre el Laguna II dTi y al mes sacaron el HDI que hace menos ruido y corre más. De todas formas no me quejo porque mi modelo es el tope gama, pero por el mismo precio hubiese tenido el "pelao" de los nuevos.

De la misma forma los vProfesional tienen otras ventajas y no se pueden comparar a nivel 2, ya que disponen de funciones remotas, objetos protocolo tcp y acceso nativo a oracle, es decir, tope gama.

Es curioso que en los foros de Velneo sólo ha surgido la confusión y el desmadre generalizado de quejas en la parte gratuita vForum Público, mientras que en la parte del foro para profesionales vEnterprise nadie ha dicho nada.

Y eso que la parte gratuita ha salido beneficiada con el cambio, y lo de los 50 euros no tiene nombre.

En fín, debe ser un cambio cultural que a mí ya me pilla tarde, me hago viejo y no estoy acostumbrado a reclamar todo gratis y ya. En mi época había que pagar por lo que querías.

Life is soft!

martes, 19 de junio de 2007

Nueva web Velneo

Aún faltan 10 minutos para que sea público pero desde aquí quiero felicitar al equipo web de Velneo por la actualización de su web.



Impresionante!!!

Acceso por niveles, blog, foro, y todo multi-idioma tiempo real.

Así es Velneo.

miércoles, 30 de mayo de 2007

BMW-VELNEO

Ante la debacle del team BMW-ORACLE frente al Luna Rossa en las semifinales de la America's Cup que se celebra estos días en Valencia, el máximo dirigente del sindicato americano ha anunciado una profunda remodelación del equipo.

Necesitamos aires nuevos, un equipo ágil, potente y eficaz

Al final de la rueda de prensa ofrecida por el dirigente se mostró la nueva imagen del equipo para la próxima America's Cup.


Life is soft!!!

viernes, 11 de mayo de 2007

Interfaz de usuario (v)

[ Viene de Interfaz de usuario (i), (ii), (iii) y (iv) ]

Si nuestro diseño va dirigido al gran público, hemos de tener en cuenta que el número de usuarios avanzados disminuye exponencialmente con el aumento de su complejidad de uso. Hemos de bajar el listón de forma que pequeños aumentos de usabilidad aumentarán enormemente el número de usuarios.

Una buena táctica de diseño de interfaz de usuario consiste en inventar diferentes usuarios imaginarios, con sus limitaciones, y enfrentarlos con nuestro software, analizar su actividad y sus espectativas de uso (el Modelo de Usuario), e intentar facilitar su experiencia, hasta que nuestro software caiga dentro de sus posibilidades.

Aunque la mejor táctica que conozco es observar cómo un usuario real intenta usar el software y descubrir así los puntos dónde el Modelo de Programa no coincide con el Modelo de Usuario.

Son unos pocos conceptos teóricos y unas cuantas recomendaciones de diseño las que he considerado conveniente compartir y difundir a lo largo de esta serie dedicada al interfaz de usuario. Espero que las encontréis tan interesantes y útiles como yo.

Para terminar, me gustaría decir que a pesar de tanto rollo y tecnicismo, creo que la belleza está en lo simple.

Al final un buen interfaz de usuario es aquel que pasa absolutamente desapercibido para el usuario. Este deja de ver el envoltorio y se centra en sus datos y su trabajo.

Y para hacer las cosas simples no necesitamos V7, verdad?. O sí?

Life is soft!

Interfaz de usuario (iv)

[ Viene de Interfaz de usuario (i), (ii) y (iii) ]

Si pretendiésemos saltarnos la consistencia porque vamos a incluir un completo y extenso manual de usuario, caeríamos en un grave error ya que los usuarios no leen los manuales.

En general, los usuarios esperan conseguir un producto hecho para ellos, y leer el manual sería visto como una pérdida de tiempo, o como mucho, como una distracción que les impediría realizar sus tareas.

De hecho, los usuarios no leen nada.

Los diseñadores de interfaz de usuario experimentados tienden a minimizar al máximo el número de palabras en los cuadros de diálogo para incrementar la posibilidad de que sean leídos.

Frente a un cuadro de diálogo extenso los usuarios avanzados obviarán las instrucciones, asumirán que ya saben usarlo y que no tienen tiempo para leer complejas instrucciones. La mayoría de los nuevos usuarios obviarán las instrucciones, no les gusta leer demasiado y esperan que la opción por defecto sea la correcta. Y el resto de usuarios, los cuales intentarán en serio leer las instrucciones, normalmente se sentirán confundidos por la cantidad de palabras y conceptos, por tanto, incluso aunque confiasen en que podrían usar el cuadro de diálogo cuando este apareció, las instrucciones que han leído consiguen confundirlos más aún.

Otro punto importante es que mucha gente se intimida por los ordenadores, así que debemos distinguir entre programas fáciles de usar, y programas posibles de usar. Incluso los usuarios avanzados, inteligentes y experimentados apreciarán todo aquello que hagamos para facilitar el trabajo de los usuarios menos avezados.

Aunque pueda parecer raro, los usuarios tienen verdaderos problemas para controlar el ratón, así que nuestro diseño no debe requerir un uso demasiado preciso del mismo. A veces los usuarios usarán dispositivos señaladores diferentes al ratón, o ratones y superficies en mal estado, o serán demasiado jóvenes o demasiado mayores o demasiado inexpertos para controlarlo al 100%, o puede que incluso padezcan algún tipo de discapacidad que les impida su uso.

Incluso en el mejor de los supuestos, el uso excesivo del ratón crea la sensación de lentitud de respuesta de la interfaz de usuario, y eso no hace feliz al usuario.

Así pues, deberemos reducir la necesidad del uso excesivamente preciso del ratón en nuestras aplicaciones.

[ Extraído básicamente de la página de Joel ]

Interfaz de usuario (iii)

[ Viene de Interfaz de usuario (i) y (ii) ]

Cuando los usuarios no tienen una expectativa concreta de cómo funciona el programa y qué se supone que debe hacer vamos a tener que darles pistas de cómo funciona. Con las interfaces gráficas, una forma muy común de resolver el problema es mediante metáforas. Una metáfora busca una similitud entre la tarea a realizar y la realidad cotidiana del usuario.

Hay que tener mucho cuidado a la hora de elegir metáforas ya que una metáfora mal elegida es peor que ninguna metáfora en absoluto.

Las buenas interfaces de usuario también proponen invitaciones.

Algunas puertas tienen grandes placas de metal a la altura del brazo. Lo único que podemos hacer con esa placa es empujarla. Otras puertas en cambio tienen asas grandes y redondeadas que hacen que queramos tirar de ellas. Incluso sugieren cómo quieren que pongas la mano en el asa. El asa te invita a tirar. Hace que quieras tirar de ella. Esto es una invitación.

Los formularios con pestañas por ejemplo son una gran invitación.

La consistencia es el principio fundamental de un buen diseño de interfaz de usuario, pero es tan sólo un corolario del axioma "haz que el Modelo de Programa se ajuste al Modelo de Usuario", porque el Modelo de Usuario va a reflejar la manera en que los usuarios ven cómo se comportan otros programas.

Desafortunadamente, hay una fuerza oscura ahí fuera luchando contra la consistencia, y es la tendencia natural de los programadores a ser creativos.

Para hacer una interfaz de usuario fácil de usar, tenemos que canalizar nuestra creatividad en otra área. En la mayoría de las decisiones de interfaz de usuario, antes de diseñar algo desde cero, debemos mirar qué están haciendo otros programas conocidos y emularlos de una manera tan parecida como sea posible.

Para crear un buen programa con una interfaz de usuario decente, vamos a tener que dejar nuestra religión en la puerta antes de empezar.

Hemos de tener en cuenta que aún si no es lo correcto, si Microsoft lo hace en un programa conocido, entonces hay millones de personas que van a pensar que está bien, o al menos, que conforma un cierto estándar, y van a asumir que tu programa funcionará igual.

Por otra parte, no deberíamos estar tan seguros de que no está bien. Microsoft se gasta muchísimo más dinero en usabilidad que nosotros, y si lo hace, por algo será.

Un buen diseñador de interfaz de usuario utilizará la consistencia de manera inteligente, y aunque con ello no pueda chulear de creatividad, a largo plazo hará que los usuarios sean más felices, y él también.

[ Extraído básicamente de la página de Joel ]

Interfaz de usuario (ii)

[ Viene de Interfaz de usuario(i) ]

Una interfaz de usuario es muy importante ya que afecta las sensaciones, las emociones y el humor de los usuarios. Si la interfaz está mal diseñada y el usuario siente que no puede controlar la aplicación, no será feliz y culpará a nuestro programa de ello.

Si la interfaz está bien diseñada y las cosas funcionan de la manera que el usuario espera estará contento al poder realizar aunque sea pequeñas tareas.

Para hacer feliz a la gente, tenemos que permitirles sentirse al mando de su entorno. Para hacer esto, necesitamos interpretar correctamente sus acciones. La interfaz necesita comportarse de la manera que ellos esperarían que se comportara.

Cuando un nuevo usuario se pone a usar un programa, no viene como una hoja en blanco. Tiene ciertas espectativas de cómo cree que el programa va a funcionar. Si ha utilizado una aplicación parecida, pensará que ésta va a funcionar como la otra. Si ha usado cualquier software anteriormente, pensará que nuestro software se atiene a ciertas convenciones comunes. Puede que intuya inteligentemente cómo va a funcionar el interfaz de usuario.

Esto es lo que se conoce como Modelo de Usuario.

El programa también tiene un modelo mental, esto es lo que se conoce como Modelo de Programa.

Si el Modelo de Programa se corresponde con el Modelo de Usuario, nuestra interfaz de usuario, y nuestro software, tendrá éxito.

Tenemos dos opciones: intentar cambiar el Modelo de Usuario, que resulta extraordinariamente difícil, o podemos explicar las cosas en el manual, pero todos sabemos que los usuarios no leen los manuales.

Así que si la montaña no va a Mahoma... la mejor elección casi siempre va a ser cambiar el Modelo de Programa en vez del Modelo de Usuario.

Si nuestro Modelo de Programa no es trivial, probablemente no es el Modelo de Usuario.

Ya es suficientemente duro hacer que el Modelo de Programa se ajuste al Modelo de Usuario cuando los modelos son simples, así que cuando un modelo se vuelve complejo, es mucho más difícil.

Debemos elegir el modelo de partida más simple posible.

[ Extraído básicamente de la página de Joel ]

Interfaz de usuario (i)

En el foro de Velneo ha surgido una inquietud de los programadores de la plataforma acerca del diseño de la interfaz de usuario que considero muy interesante y me gustaría contribuir aportando ideas que he ido recopilando de la web y que a mí personalmente me han ayudado bastante en este tema.

Quede claro que las ideas que voy a difundir no son producto original mío si no de sus respectivos autores (básicamente de la página de Joel ). Yo me he limitado a recopilarlas, y ahora, con permiso de sus autores, difundirlas ya que las considero muy acertadas, y un modelo a seguir a la hora de diseñar una interfaz de usuario.

En el momento actual Velneo sigue siendo una herramienta minoritaria usada básicamente por desarrolladores independientes y empresas desarrolladoras con plantillas bastante limitadas. Dentro de este entorno todos sabemos que no hay grandes recursos destinados al estudio de la usabilidad y accesibilidad de las aplicaciones desarrolladas, bastante hacemos con programar y vender nuestras soluciones.

En fin, que los que nos dedicamos a esto con Velneo solemos ser más programadores que diseñadores o expertos en interfaz de usuario.

No obstante existen una serie de requisitos mínimos o reglas básicas que todos podemos seguir para mejorar ese aspecto de nuestras aplicaciones.

Podríamos empezar teniendo en cuenta cinco puntos:

1.- Un usuario no utiliza tu aplicación.

Un usuario quiere hacer su trabajo de la forma más rápida, sencilla y eficiente, y la aplicación que usa no es más que una herramienta que le ayuda a logralo. Cuanto menos estorbe tu aplicación a su trabajo, mejor. A este nivel, no importa lo genial que sea tu interfaz, cuanto más simple y transparente, mejor.

2.- El tamaño y la posición importa.

Es más sencillo hacer click sobre un objeto cuando es más grande y está cercano al puntero del ratón. Los controles más usados deben ser más grandes y fácilmente reconocibles a simple vista. Nunca debemos colocar controles demasiado cercanos al borde de la pantalla.

3.- No molestar innecesariamente.

Debemos minimizar la distracción e interrupciones que nuestra aplicación presente al usuario. Cada aplicación presenta un elemento clave que debe reunir la atención del usuario; en un editor de textos es el texto, en un navegador web es la web, así que deberíamos hacer que el elemento clave sea el centro de atención del interfaz.

No debemos colocar barreras en el camino del usuario como ventanas de diálogo a no ser que estas presenten información realmente útil para él.

4.- Utilizar la potencia del ordenador.

Ya que ahora mismo disponemos de hardware más que sobrado para los requerimientos de cualquier software, debemos facilitar la experiencia del usuario exprimiendo al máximo los recursos de que disponemos. Podemos hacer que sea fácil distinguir entre elementos muy similares por ejemplo componiendo descripciones diferentes en vez de mostrar nombres o rutas demasiado largos, o podemos recordar las preferencias del usuario para que no tenga que repetir la misma operación n veces, cada vez que quiera hacer lo mismo (filtrado de listas por ejemplo).

5.- Diferenciar y localizar.

Los elementos en pantalla que hacen cosas diferentes deben ser fácilmente distinguibles unos de otros. No debemos abrumar al usuario con demasiadas opciones.

Un elemento seleccionado se debe distinguir y leer fácilmente, por ejemplo usando contraste entre el fondo y la selección.

Siguiendo estas sencillas directrices podemos hacer una interfaz de usuario que realmente ayude al usuario a realizar su trabajo en vez de confundirlo, distraerlo o abrumarlo.

Podemos ser excelsos programadores, haber cambiado el chip y haber captado la esencia de Velneo, pero si olvidamos al usuario fracasaremos.

miércoles, 25 de abril de 2007

listas, menús y otras lindezas

Cuando empecé a estudiar XHTML estricto con aspecto controlado por CSS una de las cosas que más me sorprendieron fue que una lista desordenada XHTML se convertía por la magia del CSS en un menú para la web.

Es decir, que algo tan simple como esto

[ul]
[li]Inicio[/li]
[li]Empresa[/li]
[li]Productos[/li]
[li]Contactar[/li]
[/ul]


se convertía en un bonito menú horizontal o vertical o como prácticamente nos de la gana, tan sólo aplicando css con conocimiento de causa.

Un sitio extremadamente recomendable para ver ejemplos y aplicaciones de esta y otras técnicas puede ser A List Apart.

Si analizamos el contenido de muchas webs podemos ver que casi todo puede reducirse a listas de cosas; un blog es una lista inversa en el tiempo de anotaciones y sus comentarios correspondientes, un foro es una lista de posts categorizados, un catálogo de productos es una lista de productos, etc.

Y Velneo, aparte de muchas otras ventajas, podemos decir que es el rey de las listas, con un simple Cargar lista, ya tenemos disponibles todos los registros de una tabla, preparados para ser mostrados en una lista XHTML y formateados con CSS.

Siguiendo esta técnica, tenemos webs hechas en cuatro patadas.

Por ejemplo, para el menú de la web, si tenemos una tabla MENU donde vamos dando de alta las diferentes opciones del menú web, todo se reduce a lo siguiente:

  • Un proceso que Carga la lista-> MENU, indice_apropiado
  • Un componente html tal como este

[ul]
[avpr]
[li]Campo_Nombre[/li]
[/avpr]
[/ul]


  • Un CSS que se encargue de hacer que esa lista parezca un menú

Un listado de noticias o un catálogo de productos sería algo muy similar, más complejo, pero a fin de cuentas, la idea es la misma.

Si a esto unimos la potencia, todavía muy poco explotada, de los campos Fórmula de Velneo, tenemos la herramienta definitiva para la web.

Veamos el tema de los campos fórmula con un ejemplo sencillo.

Queremos saber qué opción del menú ha pinchado un usuario para resaltarla con un estilo especial que llamaremos por ejemplo "current".

Bien, si disponemos una variable global independiente por usuario que alimentamos con el código de la opción de menú pinchada, podemos agregar a la tabla MENU un campo CLASS que sea del tipo fórmula alfabética cuya fórmula sea una decisión:

"Si el código de la opción es igual al valor de la variable global, entonces current y si no , nada"


y si a la hora de representar el menú, aparte de sacar de la tabla el nombre de la opción, el link y otras cosas, sacamos también el estilo que le corresponda según el campo fórmula alfabética CLASS, ya tenemos lo que queríamos sin programar ni una sola línea de código, símplemente utilizando la potencia de ese otro gran desconocido en Velneo, los campos fórmula.

Si, no pongais caras raras, yo ya lo hice cuando lo pensé la primera vez; pero cómo voy a hacer depender el valor de un campo de una tabla de una variable global independiente por usuario?...

E inmediatamente me dije; y por qué no?

Pues señores, dicho y hecho, y a funcionar, que funciona. A Velneo le sobra potencia para ese cálculo al vuelo independiente por usuario, y para mucho más.

Life is Soft!

miércoles, 21 de marzo de 2007

dominios & Velneo

Hoy vamos a ver cómo manejarnos con los dominios de internet y nuestro servidor Velneo.

Supongamos que hemos desarrollado una aplicación Velneo que sirve una web, y supongamos que tenemos un servidor Velneo montado en nuestra máquina sirviendo dicha aplicación.

Si no disponeis de un servidor Velneo siempre os podeis bajar una versión de prueba de la web de Velneo que funcionará durante 30 días. Cuando deje de funcionar lo vuelves a bajar.

Supongamos que tenemos un dominio, p.ej.; www.midominio.com

Este dominio lo hemos contratado en un ISP y a través de la web podemos acceder al panel de control del mismo para poder configurarlo, subir cosas al dominio si tenemos espacio contratado, etc. Desde el panel de control definiremos una redirección del dominio hacia nuestra ip.

Si no tenemos dominio siempre podemos recurrir a sitios como www.dyndns.com, donde puedes dar de alta un nombre que apunte a tu ip. Mi nombre en dyndns es www.domk.dyndns.ws

Tanto en un caso como el otro tenemos un dominio o nombre de dominio en internet redireccionado a nuestra ip pública.

Si nuestra ip pública no es fija disponemos de herramientas que automatizan el trabajo de informar al ISP de los cambios de nuestra ip pública y que se mantenga la redirección actualizada.

Hasta el momento hemos conseguido que cuando alguien teclee nuestro dominio o nombre de dominio en internet sea redirigido hasta nuestra ip pública.

De aquí en adelante puede ocurrir que tengamos router o no.

Si no tenemos router no pasa nada, pero si tenemos router hemos de redireccionar la entrada por el puerto 80 del router a la ip interna de la máquina donde tenemos nuestro servidor Velneo.

Hecho esto, en cualquiera de los dos casos ya llegamos hasta nuestro servidor Velneo, pero este no sabe qué hacer todavía con las peticiones por el puerto 80. Ahora se lo diremos.

En el apartado de dominios dentro de la configuración del servidor Velneo hemos de definir nuestro dominio indicando como dominio midominio.com o el nombre del dominio, en mi caso domk.dyndns.ws, como carpeta apuntaremos a un directorio físico de nuestra máquina que contendrá los archivos correspondientes a nuestra aplicación Velneo, y como html por defecto indicaremos un archivo html que se encontrará en la carpeta anterior.

Este archivo html lo único que debe hacer es una redirección automática a
http://www.midominio.com/cgi-vel/alias_aplicacion/

Esto hará que cualquier petición a www.midominio.com vaya a nuestro servidor Velneo y arranque el INDEX.PAG de la aplicación ALIAS_APLICACION publicada en él.

Al haber definido nuestro dominio en el servidor Velneo ya no aparecerá nuestra ip en la barra de direcciones del navegador web.

Y ya está!!!

Tenemos un nombre de dominio, que puede ser gratis, redirigido a nuestro servidor Velneo, que puede ser gratis, sirviendo nuestra web de forma casi profesional.

Life is soft!